UTC到本地的日期和时间

时间:2011-09-14 06:59:35

标签: javascript date

我写了一个函数来将UTC时间反​​转到当地时间

function utcToLocal(utc){
    var t = new Date(Number(utc));
    d = [t.getFullYear(), t.getMonth(), t.getDate()].join('/');
    d += ' ' + t.toLocaleTimeString();
    return d;
}

但我无法确认此代码是否正确?

1 个答案:

答案 0 :(得分:5)

您应该能够将UTC时间戳转换为本地日期,只需减去本地偏移量(以分钟为单位),所以:

function utcToLocal(utc){
    // Create a local date from the UTC string
    var t = new Date(Number(utc));

    // Get the offset in ms
    var offset = t.getTimezoneOffset()*60000;

    // Subtract from the UTC time to get local
    t.setTime(t.getTime() - offset);

    // do whatever
    var d = [t.getFullYear(), t.getMonth(), t.getDate()].join('/');
    d += ' ' + t.toLocaleTimeString();
    return d;
}

我在哪里,偏移量是-600,所以我需要从UTC时间减去-36,000,000毫秒(实际上增加了36,000,000毫秒)。

修改

我可能误解了这个问题。

javascript日期实例的内部值是UTC时间片段(以毫秒为单位)。因此,如果utc是这样的时间(例如2012-08-19T00:00:00Z是1345334400000),则OP将基于该值创建日期实例,toLocaleTimeString将显示依赖于实现的字符串所提供的UTC时间的当地时间。

因此,如果当地时区偏移量为-6小时,则alert(new Date(1345334400000)))显示类似 2012年8月18日星期六18:00:00 GMT-600

我假设OP想要将本地时间设置为与UTC时间相同的时间,例如2012-08-19T00:00:00Z将成为2012-08-19T00:00:00本地。