1
28
基本要素
JavaScript正式支持
简化
ISO 8601扩展格式。格式如下:
注意年份
必须
至少有四位数字,月/日/小时/分/秒
必须
精确到两位数,毫秒
必须
正好有三位数。例如,
以下是有效日期(时间)字符串的一些示例:
省略时区偏移量时,日期时间将解释为用户本地时间。 如果完全忽略时间,则日期将被解释为UTC。
重要的
:
所有现代和相当旧的浏览器和实现都支持
全长
日期时间格式符合规范。
然而
,在处理不带时区的日期(时间)字符串时存在差异(有关详细信息,请参阅下面的“缺少时区偏移量”)。你应该
不
使用不带时区的日期-时间字符串(状态2018)。
而是通过
unix timestamp in milliseconds or separate arguments for different parts of the date
致
大多数浏览器还支持其他一些格式,但它们没有指定,因此在所有浏览器中的工作方式不尽相同。 如果需要,您应该只使用上面解释的日期-时间字符串格式。 在其他浏览器中,甚至在同一浏览器的其他版本中,所有其他格式都可能中断。
如果你碰到
再详细一点。 日期时间字符串格式
ECMAScript(JavaScript语言实现的规范)一直支持
基础知识
ECMAScript指定
Date Time String Format
作为一个
简化
的
ISO 8601 Extended Format
. 格式如下:
规范也 mentions 如果“字符串不符合[指定的]格式,则函数可能会返回到任何特定于实现的启发式或特定于实现的日期格式”,这可能会导致不同浏览器中的日期不同。 ECMAScript不考虑任何用户本地日期时间格式,这意味着您不能使用特定于国家或地区的日期时间格式。 短日期(和时间)表单规范还包括以下较短的格式。
回退值
有关缺少浏览器支持的详细信息,请参阅下面的“缺少时区偏移”。 超出范围的值
例如,
延长年限
ECMAScript的日期时间格式还指定
extended years
六位数的年份值。
这种扩展年份字符串格式的示例如下
日期API
ECMAScript指定了
date object properties
.
给定一个有效的日期对象,您可以使用
也可以检测日期对象是有效的还是
源和更多信息可以在 Detecting an âinvalid dateâ Date instance in JavaScript . 实例有效日期时间格式根据规范,以下日期时间格式均有效,应适用于支持ES2016或更高版本的每个浏览器、Node.js或其他实现。
无效的日期时间格式请注意,根据规范,以下示例无效。 但是,这并不意味着没有浏览器或其他实现将它们解释为日期。拜托 因为它们是非标准的,在某些浏览器或浏览器版本中可能会失败。
浏览器支持
今天,
every modern and reasonably old browser supports the date time format
这是在2009年ES5规范中引入的。
然而,即使在今天(状态2018),没有时区的日期-时间字符串也有不同的实现(参见下面的“缺少时区偏移量”)。
如果需要支持较旧的浏览器或使用不带时区的字符串,则不应使用日期-时间字符串
.
相反,通过
number of milliseconds since January 1, 1970, 00:00:00 UTC
或
two or more arguments representing the different date parts
致
缺少时区偏移
ES5.1标准
incorrectly
声明缺少时区偏移量的值为
根据
this answer
,有些实现从未实现ES5.1中指定的行为。
其中之一似乎是Mozilla Firefox。
其他似乎符合ES2016(及更高版本)规范的浏览器有Google Chrome 65+、Microsoft Internet Explorer 11和Microsoft Edge。
苹果Safari(11.1.2)的当前版本是
不
兼容,因为它错误地解析没有时区的日期-时间字符串(例如。
传统日期时间格式ES5在2009年引入了日期-时间字符串规范。 在此之前,所有浏览器都不支持指定的格式。 因此,每个浏览器供应商都增加了对不同格式的支持,而这些格式在不同的浏览器(和版本)中往往不起作用。 有关古代历史的一个小例子,请参见 date-formats . 大多数浏览器仍然支持这些传统格式,以便不破坏旧网站的向后兼容性。 但依赖这些非标准格式是不安全的,因为它们可能不一致或随时被删除。
|
2
1
一般建议不要使用内置解析器,因为它是不可靠的,所以“应该”的答案是“无”。见 Why does Date.parse give incorrect results?
不过,正如str所说,您可以将ECMA-262中指定的格式与时区一起使用:
不。
不一样。除了ECMA-262中的格式之外,任何其他格式都依赖于实现,并且在解析ECMA-262格式时存在错误。
可能再次不同,见上文。
也许 吧。因为它不是标准格式,解析依赖于实现,所以也许,也许不是。
它使用主机时区偏移量,将字符串解析为本地,并使用本地时间生成显示的字符串。否则使用UTC(内部时间值为UTC)。
Date.parse.toString ,或查看 Where can I find documentation on formatting a date in JavaScript?
前三个答案之一 here 应该回答这个问题。
它们基于默认格式或提供的格式解析它们。读取源代码(例如。 fecha.js 是一个简单的解析器和格式化程序,具有编写良好、易于理解的代码)。 解析器并不难写,但是尝试猜测输入格式(就像内置解析器所做的那样)在实现之间是充满了麻烦、不可靠和不一致的。所以解析器应该要求提供格式,除非输入字符串是解析器的默认格式。 附言在ECMAScript 2019(目前正在起草中)中,实现必须支持对字符串格式的解析和格式化,但我认为避免内置解析器的一般建议将持续一段时间。 |