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 新日期(“GMT”)添加GMT小时数_Javascript_Date - Fatal编程技术网

Javascript 新日期(“GMT”)添加GMT小时数

Javascript 新日期(“GMT”)添加GMT小时数,javascript,date,Javascript,Date,输出:2017年4月10日星期一05:00:00 GMT+0800(+08) 假设是:2017年4月9日星期日21:00:00 GMT+0800(+08)这很容易。您可以尝试以下方法: var开始=新日期(“2017-04-09T21:00:00”); start.setTime(start.getTime()+start.getTimezoneOffset()*60*1000); console.log(启动)有一条黄金法则,您永远不应该使用日期构造函数解析字符串(或Date.parse,它

输出:2017年4月10日星期一05:00:00 GMT+0800(+08)


假设是:2017年4月9日星期日21:00:00 GMT+0800(+08)

这很容易。您可以尝试以下方法:

var开始=新日期(“2017-04-09T21:00:00”);
start.setTime(start.getTime()+start.getTimezoneOffset()*60*1000);

console.log(启动)有一条黄金法则,您永远不应该使用日期构造函数解析字符串(或Date.parse,它们在解析时是等效的)

根据,不带时区的ISO 8601格式日期应视为本地日期:

当时区偏移不存在时,只解释日期形式 作为UTC标准,时间和日期格式被解释为本地时间

因此
新日期(“2017-04-09T21:00:00”)
应返回主机时区2017年4月9日晚上9:00的日期

然而,在Safari 10和Chrome 57中的测试表明,“2017-04-09T21:00:00”被视为Z或GMT+0000。Firefox49似乎奇怪地将其视为UTC,然后以错误的方式调整本地时区。然而,Firefox38正确地将其视为本地的

所以总是手动解析字符串。使用库或编写短函数,例如

//将2017-04-09T11:00:00.000解析为本地
函数parseISOLocal(s){
var b=s.split(/\D/);
返回新日期(b[0],b[1]-1,b[2],(b[3]| 0),
(b[4]| | 0)、(b[5]| | 0)、(b[6]| | 0));
}
var s='2017-04-09T21:00:00.000';
log('内置解析器:'+新日期.toString());

log('parseISOLocal:'+parseISOLocal.toString())远程
T
来自
“2017-04-09T21:00:00”
但我使用的是FullCalendar,它在使用
T
输入日期时工作正常。那么start.toutString()呢@Smit从
FullCalendar
传递到
Date
constructor@gurvinder372-这将使它不是ISO 8601字符串,然后解析将依赖于实现。Safari将返回无效的日期。除了
新日期(“2017-04-09T21:00:00”)
在不同的浏览器中返回不同的结果。对我来说,在Firefox49中,上面返回的是“2017-04-09T01:00:00.000Z”。在Safari中返回“2017-04-09T11:00:00.000Z”。根据ECMA-262,它应该被视为本地时间,因此不需要调整本地时区。在firefox中,当您将参数传递给Date()构造函数时,它被视为本地时间并返回格林威治标准时间。但是,在chrome中,该参数被视为格林威治平均时间并返回本地时间。因此,您需要检测浏览器并据此计算时间(输出)。但我不明白为什么Safari会返回意想不到的结果。如果你走上浏览器嗅探的道路,你会陷入痛苦的世界。只需手动解析字符串。
var start = new Date("2017-04-09T21:00:00");