Date对象的基础值实际上是UTC。为了证明这一点,请注意,如果您键入内容
new Date(0),则会看到类似:的信息
Wed Dec 31 196916:00:00 GMT-0800 (PST)。GMT中将0视为0,但
.toString()方法显示本地时间。
重要说明,UTC代表 世界 时码。当前在2个不同位置的当前时间是相同的UTC,但是输出的格式可以不同。
我们需要的是一些格式
var _date = new Date(1270544790922); // outputs > "Tue Apr 06 2010 02:06:30 GMT-0700 (PDT)", for me_date.toLocaleString('fi-FI', { timeZone: 'Europe/Helsinki' });// outputs > "6.4.2010 klo 12.06.30"_date.toLocaleString('en-US', { timeZone: 'Europe/Helsinki' });// outputs > "4/6/2010, 12:06:30 PM"
这行得通,但是…您不能真正将其他任何日期方法用于您的目的,因为它们描述了用户的时区。您需要的是与赫尔辛基时区相关的日期对象。此时,您的选择是使用某些3rd
party库(我建议这样做),或修改date对象,以便您可以使用大多数方法。
选项1-第三方,例如moment-timezone
moment(1270544790922).tz('Europe/Helsinki').format('YYYY-MM-DD HH:mm:ss')// outputs > 2010-04-06 12:06:30moment(1270544790922).tz('Europe/Helsinki').hour()// outputs > 12
这看起来比我们接下来要做的要优雅得多。
选项2-修改日期对象
var currentHelsinkiHoursOffset = 2; // sometimes it is 3var date = new Date(1270544790922);var helsenkiOffset = currentHelsinkiHoursOffset*60*60000;var userOffset = _date.getTimezoneOffset()*60000; // [min*60000 = ms]var helsenkiTime = new Date(date.getTime()+ helsenkiOffset + userOffset);// Outputs > Tue Apr 06 2010 12:06:30 GMT-0700 (PDT)
它仍然认为它是GMT-0700(PDT),但是如果您不太凝视,则可能会误认为这是对您有用的日期对象。
我方便地跳过了一部分。您需要能够定义
currentHelsinkiOffset。如果可以
date.getTimezoneOffset()在服务器端使用,或者仅使用一些if语句来描述时区更改的时间,那应该可以解决您的问题。
结论 -我认为,为此目的,您尤其应使用类似moment-timezone的日期库。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)