【问题标题】:creating a new date with CEST timezone [duplicate]使用 CEST 时区创建新日期 [重复]
【发布时间】:2019-08-05 13:43:56
【问题描述】:

我想知道为什么下一行有效:

new Date("06/19/2019 06:42 EDT") //Wed Jun 19 2019 13:42:00 GMT+0300

但是这个没有:

new Date("06/19/2019 06:42 CEST") //Invalid date

【问题讨论】:

  • 日期构造函数需要 RFC 8601 字符串。无论是否有效,其他任何事情都是公平的游戏。
  • @amy — 您可能指的是 ISO 8601 或 RFC 2822(或 RFC 3339),但 ECMAScript 可解析格式也不完全是。最好只参考 ECMA-262 的相关部分。 ;-)

标签: javascript date


【解决方案1】:

JavaScript Date 对象的构造函数可以使用以下任何语法选项:

1) new Date();
2) new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
3) new Date(value);
4)new Date(dateString);


您的示例使用选项 #4,datestring - 关于哪个,n.b.:

“强烈建议不要使用 Date 构造函数解析日期字符串... 浏览器的差异和不一致。”


如果您的构造函数必须使用 dateString 选项,则字符串需要“以 Date.parse() 方法识别的格式指定”(即,符合 IETF 的 RFC 2822 时间戳或ISO8601 版本)。

这种格式要求很可能是您的尝试偏离方向的地方——但是如上所述,结果会因浏览器而异——因此您可以考虑构造一个默认的 Date 对象并使用Date 类提供的设置器来分配您想要的值。

例如(如果您想要的时区与运行脚本的时区匹配):


const date = new Date();

date.setFullYear(2019);
date.setMonth(0); // Note that the months array starts with zero for January
date.setDate(1);

date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);

console.log(date.toLocaleString()); // Logs `1/1/2019, 12:00:00 AM`

可以在此MDN reference page 上找到更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2022-11-13
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多