【问题标题】:toDateString() decrements my datetoDateString() 递减我的日期
【发布时间】:2013-07-31 08:17:54
【问题描述】:

对于以下代码:

var d = new Date("2013-07-01");
console.log(d.toDateString());

它输出 Sun Jun 30 2013,比输入少一天。对象怎么了?实际存储的日期是什么?

【问题讨论】:

标签: javascript date


【解决方案1】:

日期被解析为 UTC 日期,但 toDateString() 输出当地时区的时间。

试试这个

var d = new Date(2013, 6, 1); //6 instead of 7 because the mont argument is  zero-based
console.log(d.toDateString());

实际存储的日期是什么?

2013-07-01 00:00:00 UTC

【讨论】:

  • 您的最后一条评论破坏了您的答案!—当您合理地更改代码以在本地时区解析(并在本地时区打印)时,实际存储的日期可能不 在不知道当地时区的情况下确定!
【解决方案2】:

根据您使用的浏览器/运行时,从字符串解析Date 会产生不同的结果。 a chart here 列出了一些浏览器及其支持的内容。

但一般来说,像"2013-07-01" 这样的字符串会被视为 UTC 的午夜。

如果你想在本地时间解析它,你可以使用"2013/07/01"。但这有点奇怪。您可能很想使用"07/01/2013",但这可能会被解释为 1 月 7 日或 7 月 1 日。其中任何一个仍然是特定于实现的。

如果您想要一个通用的、“适用于任何地方”的解决方案,您有几个不同的选择:

选项 1

不要解析它。使用接受整数的构造函数。

var d = new Date(2013,6,1);    // watch out for the zero-based month
console.log(d.toDateString());

// output:  "Mon Jul 01 2013"

使用此代码,实际存储的 UTC 时间将根据您自己的时区而有所不同。但既然.toDateString() 也考虑了那段时间,那你应该没问题。

选项 2

将其解析为 UTC,并将其显示为 UTC/GMT:

var d = new Date("2013-07-01");
console.log(d.toUTCString());

// output:  "Mon, 01 Jul 2013 00:00:00 GMT"

但是这个输出可能比你想要的要多,而且它在不同的浏览器中可能看起来仍然不同。

选项 3

使用moment.js 库,您可以在其中完全控制所需的格式。

var m = moment("2013-07-01", "YYYY-MM-DD");  // explicit input format
console.log(m.format("ddd MMM DD YYYY"));    // explicit output format

// output:  "Mon Jul 01 2013"

恕我直言,这是最好的解决方案。但它确实需要您使用库。

【讨论】:

  • 现在有一个改进的“选项 2”:d.toLocaleString('en-US', {timeZone: "UTC", day: "2-digit", month: "short", year: "numeric", weekday: "short"})。确切的输出取决于实现,但我没有看到问题:这里是"Mon, Jul 01, 2013"。如果您不喜欢逗号,那么在爱尔兰他们也不喜欢逗号:使用en-IE 作为语言环境。
  • @RobertSiemer - 好点。随意添加您自己的答案。
【解决方案3】:

选项 4

这种方法效果很好,不需要 3rd 方库。

    var parts ='2013-07-01'.split('-');
    var mydate = new Date(Date.UTC(parts[0],parts[1]-1,parts[2])); //please put attention to the month

【讨论】:

  • 建议将具有未知时区的日期转换为具有特定时区的日期,只有在讨论输入和输出时才是合理的。—在您编辑之前,Date 对象只有在使用时才合理使用本地时区,编辑后只有与 UTC 一起使用才合理。 @1_bug 错误地将您的本地时间对象读取为 UTC。
猜你喜欢
  • 2018-09-29
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多