应如何妥善处理不同时区的日期?

时间:2015-12-05 00:54:12

标签: javascript date momentjs

我收到格式为'MM/DD/YY HH:mm'的日期,我可以知道来自的日期。我正在尝试通过moment-timezone帮助他们根据时区将他们转换为标准的Javascript UTC日期。

这是我正在尝试的一个例子:

var startTime = '12/03/15 14:00'
var zoneOffset = moment(startTime, 'MM/DD/YY HH:mmZ').tz('America/Chicago').format().substring(19);
var tzAdjusted = moment(startTime + zoneOffset, 'MM/DD/YY HH:mmZ');
var date = tzAdjusted.toISOString();

然后,我试着测试我的逻辑:

describe('Timezone conversions', function () {
    it('Should properly convert timezones despite of running environment', function (done) {

    var startTime = '12/03/15 14:00'
    var zoneOffset = moment(startTime, 'MM/DD/YY HH:mmZ').tz('America/Chicago').format().substring(19);
    var offset = moment(startTime + zoneOffset, 'MM/DD/YY HH:mmZ').format();
    offset.slice(-6).should.equal('-06:00');
    done();
    })
});

因为我在México运行这个,因为芝加哥运行良好,所以在相同的时区偏移,但是如果我在运行(export TZ='UTC')之前将我的时区设置为UTC,那么什么会失败

这样做的正确和正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

就个人而言,我尝试通过将所有日期和时间保存为Posix时间戳(自1970年1月1日GMT以来经过的秒数)来避免此问题。你可以很快得到当前的时间戳:

var the_time_right_now = Date.now();

就是这样。 Date对象附带了各种方法,可以帮助您根据时区等从那里转换时间。