将UTC时间转换为提供的时区,不得依赖于浏览器时区

时间:2015-04-10 12:03:54

标签: jquery datetime timezone momentjs

之前有人提出过这样的问题,但我的情况有点棘手。 我有一个UTC的日期时间。无论我们通过什么,我都希望将它转换为特定的时区。 目前我正在使用时刻时区库。 它会发生什么,它会在浏览器的时区中考虑提供的时间,然后尝试在提供的时区中进行转换。 我想提供一些时间来考虑UTC。

js code:

var datetime = '2015/04/10 15:35:00';
datetime = moment(datetime).format('YYYY-MM-DD HH:mm:ss');
datetime = moment.utc(datetime);
return moment(datetime).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

我也尝试过直接应用utc,如:

var datetime = '2015/04/10 15:35:00';
datetime = moment.utc(datetime).format('YYYY-MM-DD HH:mm:ss');
return moment(datetime).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

但它们都没有按预期工作。我可能还不清楚时刻如何运作。

请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:2)

在转换到时区之前,只需解析为utc。

var datetime = '2015/04/10 15:35:00';

return moment.utc(datetime,'YYYY/MM/DD HH:mm:ss')
             .tz(siteTimeZone)
             .format('YYYY-MM-DD HH:mm:ss');

另请注意,我在解析时提供了一个格式字符串,它与传入的值的格式相匹配。这是一个很好的做法,可以防止在控制台上生成警告。

答案 1 :(得分:0)

在Date对象中获取字符串,然后使用datetime.toUTCString()从中获取UTC字符串,最后设置timeZone&格式,如下:

以下是经过测试的代码:

var datetime = new Date('2015/04/10 15:35:00');
datetime = datetime.toUTCString();
datetime = moment(new Date(datetime)).tz(siteTimeZone).format('YYYY-MM-DD HH:mm:ss');

DEMO