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_Timezone_Momentjs - Fatal编程技术网

如何在浏览器Javascript中在另一时区中创建日期

如何在浏览器Javascript中在另一时区中创建日期,javascript,date,timezone,momentjs,Javascript,Date,Timezone,Momentjs,我有一个客户端web应用程序,用户必须为自己的时区以外的时区创建日期,我不确定最好的方法 使用时刻时区,我知道如何将一个时间转换为另一个时区。也就是说,将2013年11月18日11:00:00 GMT-0500转换为2013年11月19日03:00:00 GMT+1100。这些仍然代表相同的绝对时间,但只是具有不同的“视图” 我需要做的是将2013年11月18日11:00:00美国/多伦多的夏令时转换为2013年11月18日11:00:00澳大利亚/悉尼的夏令时(这是不同的绝对时间) 到目前为止

我有一个客户端web应用程序,用户必须为自己的时区以外的时区创建日期,我不确定最好的方法

使用时刻时区,我知道如何将一个时间转换为另一个时区。也就是说,将
2013年11月18日11:00:00 GMT-0500
转换为
2013年11月19日03:00:00 GMT+1100
。这些仍然代表相同的绝对时间,但只是具有不同的“视图”

我需要做的是将2013年11月18日11:00:00美国/多伦多的夏令时转换为2013年11月18日11:00:00澳大利亚/悉尼的夏令时(这是不同的绝对时间)

到目前为止,我能想到的唯一方法是创建一个
日期
,将其序列化为字符串,然后用矩时区对其进行解析,类似于:

localEvent = new Date(2015, 03, 10, 18, 30)
eventStr = localEvent.toString().split('GMT')[0]
# eventStr = 'Fri Apr 10 2015 18:30:00'
event = moment.tz(eventStr, 'Australia/Sydney')
因此,无论浏览器在哪个时区运行,这段代码都将创建完全相同的时间点


但这感觉很烦人,有更好的方法吗?

是的,你可以做得更好:

var zone = moment().tz('Australia/Sydney');

var c = moment(new Date(2015, 03, 10, 18, 30));
c.utcOffset(zone.utcOffset(), true);
                             // ^--- this flag keeps the same time
                             //      while shifts a timezone

console.log(c.format());
JSFiddle:


我是如何找到的:我刚刚查看了时刻和时刻时区来源:

你知道时差是多少吗?你需要查一下吗?@WillReese我需要查一下,因为时差可能会改变。由于夏令时制度,在保存时差和创建日期时间之间的时间内,偏移可能会改变已经改变了。