【问题标题】:Parse and return components of a date using Javascript使用 Javascript 解析和返回日期的组成部分
【发布时间】:2015-09-17 19:04:13
【问题描述】:

我将一系列日期格式类似于 2014-12-31(年、月、日)加载到网页中。

我想使用 Javascript 将日期重新格式化为 2014 年 12 月 31 日(月、日、年)。

是否可以在不拆分字符串和重新格式化的情况下做到这一点;换句话说,是否可以只使用Javascripts date() 函数?

例如,如果我尝试:

d = new Date.parse('2014-12-31')

有没有办法只返回年、月或日?

我尝试了 d.getYear(),但这引发了“未找到函数”错误。

【问题讨论】:

  • Date.parse 返回时间戳,而不是日期对象(至少在 Firefox 上)。并且你不能在Date.parse之前添加newnew是用于创建对象,这里你是在调用一个静态方法。如果你想要一个Date 对象,你只需做new Date('2014-12-31')
  • 如果你能够使用 js 库,我建议使用 Moment.js。有很多实用方法可以显示和解析日期。 momentjs.com

标签: javascript date


【解决方案1】:

你可以使用 momentjs.com 吗?它比默认的要强大得多。

var yourInput = "2014-12-31";
var moment = require("moment");
var d = moment(yourInput);
var iYear = d.year();
var iMonth = d.month();
var iDay = d.day();

【讨论】:

  • 虽然我希望有一个内置的 Javascript 解决方案,但这绝对是最简单的方法,因为我在不同的浏览器中得到了不同的结果,而且我不想有一大堆案例场景。谢谢!
【解决方案2】:

这是可能的,但是我展示的不是很漂亮,所以我同意使用完善的 moment.js 是一个更好的主意。如果您不得使用库...

如果用户落后于 GMT,您必须小心,因为创建一个新的日期(没有以小时为单位的时间)将被设置为前一天。 getTimezoneOffset() 用于将所需日期更正为午夜。

此外,您必须定义要显示的月份数组。默认情况下,获取月份会返回 0 到 11 之间的整数。(Jan = 0)

     function myDateFormat(ymd) {
         var rawDate = new Date(ymd);
         var midnight = new Date(rawDate.getTime() +
                                 rawDate.getTimezoneOffset() * 60 * 1000);
         var months = ["January", "February", "March", "April",
                       "May", "June", "July", "August",
                       "September", "October", "November", "December"]

         return months[midnight.getMonth()] + " " +
                midnight.getDate() + ", " + midnight.getFullYear();
     }

     // test function
     function display(x) {
         document.getElementById("result").innerHTML += x + "\n";
     }

     display("2015-02-15 is " + myDateFormat("2015-02-15"));
     display("2014-12-31 is " + myDateFormat("2014-12-31"));
     display("2015-10-10 is " + myDateFormat("2015-10-10"));
<pre id="result"></pre>

【讨论】:

    【解决方案3】:

    你应该只使用var d = new Date('2014-12-31');

    Date.parse 返回自 Unix 纪元以来的毫秒数,而不是 Date 对象。

    【讨论】:

    • 返回一个 NaN 错误。如果我删除“新”,那么我将返回日期。但是 d.getYear() 仍然不是函数。
    • 在我的节点控制台中,it works perfectly。关于您的编辑,getYear() was deprecated.
    • 这很奇怪。我在 Chrome 和 Firefox 上尝试过,但无法让您的示例正常工作:imgur.com/cM35t4U
    • 您需要new 关键字。我刚刚确认我的代码在 Firefox 和 Safari 控制台中有效。
    • Oy vey... 我得到的结果不一致。如果我在 Firefox 上运行 d.getFullYear(),那么它会返回 2014。但如果我在 Chrome 上运行它,它会返回 2013。此外,d.getYear() 在 Chrome 上会返回 113。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2012-06-16
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多