如何在浏览器Javascript中在另一时区中创建日期
我有一个客户端web应用程序,用户必须为自己的时区以外的时区创建日期,我不确定最好的方法 使用时刻时区,我知道如何将一个时间转换为另一个时区。也就是说,将如何在浏览器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澳大利亚/悉尼的夏令时(这是不同的绝对时间) 到目前为止
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我需要查一下,因为时差可能会改变。由于夏令时制度,在保存时差和创建日期时间之间的时间内,偏移可能会改变已经改变了。