Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript仅日期格式保证在现代浏览器中被解释为本地时间_Javascript_Date_Datetime_Cross Browser_Timezone - Fatal编程技术网

JavaScript仅日期格式保证在现代浏览器中被解释为本地时间

JavaScript仅日期格式保证在现代浏览器中被解释为本地时间,javascript,date,datetime,cross-browser,timezone,Javascript,Date,Datetime,Cross Browser,Timezone,我正在寻找一种日期格式(只有年、月和日,没有时间组件),当用JavaScript传递给date()构造函数时,它将保证在所有合理的现代浏览器中解释为本地时间 (英文缩写为3个字母的月份)(2位日期)(4位年份)格式似乎很有效。当我在我的英文系统上用Chrome创建新日期('2015年4月1日'),我的机器位于东部时区时,我得到了2015年4月1日星期三00:00:00 GMT-0400(东部夏时制),这正是我想要的 但是,我不确定此(英文缩写为3个字母)(2位日期)(4位年份)格式是否保证以相同

我正在寻找一种日期格式(只有年、月和日,没有时间组件),当用JavaScript传递给date()构造函数时,它将保证在所有合理的现代浏览器中解释为本地时间

(英文缩写为3个字母的月份)(2位日期)(4位年份)
格式似乎很有效。当我在我的英文系统上用Chrome创建新日期('2015年4月1日'),我的机器位于东部时区时,我得到了2015年4月1日星期三00:00:00 GMT-0400(东部夏时制),这正是我想要的

但是,我不确定此
(英文缩写为3个字母)(2位日期)(4位年份)
格式是否保证以相同的方式解释,而不考虑浏览器和浏览器/OS区域设置/语言

这种格式在不同的(相当现代的)浏览器和区域设置中会以同样的方式工作吗?如果没有,那么还有其他格式可以使用吗

请注意,ISO-8601没有回答这个问题。ISO-8601仅日期字符串被解释为UTC,而不是本地时间,因此
新日期('2015-04-01')
被解释为
2015年3月31日星期二20:00:00 GMT-0400(东部夏时制)
,即4月1日变为3月31日,这不是我想要的

我正在寻找一种日期格式(只有年、月和日,没有时间组件),当用JavaScript传递给date()构造函数时,在所有合理的现代浏览器中,它将被保证解释为本地时间

没有。实际上,有许多格式可以被所有使用的浏览器可靠地解析,但是ECMA-262不要求ECMAScript实现支持这些格式

ES5和ECMAScript 2015中规定了一种格式,即ISO 8601的版本,但在ES5中,没有时区的日期将被视为UTC,在ECMAScript 2015中,则被视为“本地”

这被实施者视为“破坏网络”,因此,虽然一些浏览器实施了一段时间,但现在它们已恢复到ES5行为,并将丢失的时区视为UTC

格式上的一个小变化,如将分隔符从“-”改为“/”会导致回归到依赖于实施的行为,并可能导致日期被视为UTC或本地(尽管大多数人似乎将2015/12/17视为本地)

所以,如果你想要一个担保,那就没有了。但是,如果您准备编写一个两行函数,那么可以根据您喜欢的时区可靠地解析一个类似ISO8601的字符串。如果希望将其视为本地(即设置为00:00:00并基于系统设置进行偏移),则:

函数parseISOLike(s){
var b=s.split(/\D/);
返回新日期(b[0],b[1]-1,b[2])
}
文件编写(类似parseISOLike('2015-12-17')“ISO-8601仅日期字符串被解释为UTC格式”。这是在ES5中,将其更改为“本地”。