Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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_Regex_Date_Operating System - Fatal编程技术网

Javascript &引用;(时区)“;在某些机器上可接受新日期()的输入,但其他机器预期;时区“;

Javascript &引用;(时区)“;在某些机器上可接受新日期()的输入,但其他机器预期;时区“;,javascript,regex,date,operating-system,Javascript,Regex,Date,Operating System,我们有一个函数,可以像JS一样解析UTC中的日期/时间对,但随后会强制它的行为就像在本地时区中指定一样。下: var tz = (new Date()).toString().match(/\((.+)\)$/)[0]; var str = (new Date()).toUTCString(); str = str.replace(/GMT$/,tz); var output = new Date(str); 正则表达式返回两个结果,对于我的时区,我得到'(太平洋夏令时)和“太平洋夏令时”。对

我们有一个函数,可以像JS一样解析UTC中的日期/时间对,但随后会强制它的行为就像在本地时区中指定一样。下:

var tz = (new Date()).toString().match(/\((.+)\)$/)[0];
var str = (new Date()).toUTCString();
str = str.replace(/GMT$/,tz);
var output = new Date(str);
正则表达式返回两个结果,对于我的时区,我得到
'(太平洋夏令时)
“太平洋夏令时”
。对于我们所有的Mac和ubuntu机器,
“太平洋夏令时”或
var tz=(新日期()).toString().match(/\(.+)\)$/)[1]工作。但是,在我们的一些windows计算机上,无论使用何种浏览器,我们都需要
'(太平洋夏令时)
var tz=(新日期()).toString().match(/\(.+)\)$/)[0],或
新日期(str)
计算为
无效日期

这是什么原因造成的?这真的是某种奇怪的操作系统差异吗?我们如何检查这个


我一直在用不同的机器玩它,等等。

在我看来,你已经把事情复杂化了,难道你不能简单地使用:

new Date(Date.now() + (new Date()).getTimezoneOffset() * 60 * 1000);
或者为了更好的兼容性和避免多个日期对象:

var a = new Date();
a.setTime(a.getTime() + a.getTimezoneOffset() * 60 * 1000);

在我看来,你已经把事情复杂化了,难道你不能简单地使用:

new Date(Date.now() + (new Date()).getTimezoneOffset() * 60 * 1000);
或者为了更好的兼容性和避免多个日期对象:

var a = new Date();
a.setTime(a.getTime() + a.getTimezoneOffset() * 60 * 1000);
这是什么原因造成的

的输出完全取决于实现

这真的是某种奇怪的操作系统差异吗

它从一开始就是这样,并且与规范一致(见上文)

我们如何检查这个

时区命名没有标准,您也不能依赖于一致命名时区的实现。不同的实现使用不同的名称

例如,Chrome中的toString方法报告“E.Australia Standard Time”(澳大利亚标准时间),IE显示时区“UTC+1000”,通常称为“澳大利亚东部标准时间”

主机的时区偏移量由Date.prototype.getTimezoneOffset以分钟为单位返回,但与ISO 8601约定的符号相反。所以+10:00是-600,-07:00是+420

根据您对andlrc答案的评论:

但它的出现日期为2016-06-12,时间为11:45:00,这 然后设置为str作为str=(新日期(日期+“T”)+ 时间)toutString()

这是一件奇怪的事。没有时区的日期和时间将被视为本地,因此将根据本地时区进行调整。然后以GMT时区输出,因此它将根据主机系统的时区设置显示不同的日期和时间

另外,强烈建议不要使用日期构造函数(或Date.parse)解析字符串,因为它在不同浏览器之间不一致(您上面的解析将在IE 8中返回无效的日期,一些主机将允许超出范围的值,而一些主机则不允许)。您应该手动解析日期和时间(库可以提供帮助,但特定格式的解析函数编写起来非常简单)

这是什么原因造成的

的输出完全取决于实现

这真的是某种奇怪的操作系统差异吗

它从一开始就是这样,并且与规范一致(见上文)

我们如何检查这个

时区命名没有标准,您也不能依赖于一致命名时区的实现。不同的实现使用不同的名称

例如,Chrome中的toString方法报告“E.Australia Standard Time”(澳大利亚标准时间),IE显示时区“UTC+1000”,通常称为“澳大利亚东部标准时间”

主机的时区偏移量由Date.prototype.getTimezoneOffset以分钟为单位返回,但与ISO 8601约定的符号相反。所以+10:00是-600,-07:00是+420

根据您对andlrc答案的评论:

但它的出现日期为2016-06-12,时间为11:45:00,这 然后设置为str作为str=(新日期(日期+“T”)+ 时间)toutString()

这是一件奇怪的事。没有时区的日期和时间将被视为本地,因此将根据本地时区进行调整。然后以GMT时区输出,因此它将根据主机系统的时区设置显示不同的日期和时间


另外,强烈建议不要使用日期构造函数(或Date.parse)解析字符串,因为它在不同浏览器之间不一致(您上面的解析将在IE 8中返回无效的日期,一些主机将允许超出范围的值,而一些主机则不允许)。您应该手动解析日期和时间(库可以提供帮助,但特定格式的解析函数编写起来非常简单)

FYI
(new Date()).toString()==Date()
你不能只使用完全匹配的
。匹配(/\(.*?)/)[0]
@和lrc如果我将结果放入替换中,然后使用上面的完全匹配的新日期(str),它返回给我
”(太平洋夏令时)
,我在我的机器上得到“无效日期”,但在其他机器上没有。FYI
(new Date()).toString()==Date()
你就不能使用完全匹配吗?匹配(/\(.*?)/)[0]
@和LRC如果我将结果放入替换中,然后像上面一样使用完全匹配的新日期(str),它会为我返回
'(太平洋夏令时)
,我会得到“无效日期”在我的机器上,但不是在其他机器上。我认为这更有意义,我现在正在测试它,当我摸索这个(日期很难!)时会回答。我没有这个等式的另一半(输入来自哪里)但是它像
date=2016-06-12
time=11:45:00
,然后被设置为str作为
str=(新日期(date+“T”+time))toutString();
我认为这更有意义,我现在正在测试它,当我摸索这个(日期很难!).我没有这个等式的另一半(输入来自哪里),但它像
date=2016-06-12
一样