Дата и время UTC по местному времени - PullRequest
4 голосов
/ 14 сентября 2011

Я пишу функцию для обратного времени UTC к местному времени

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

но я не могу подтвердить, что этот код правильный?

1 Ответ

5 голосов
/ 14 сентября 2011

Вы должны быть в состоянии преобразовать метку времени 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,поэтому мне нужно вычесть -36 000 000 мс из времени UTC (что фактически добавляет 36 000 000 мс).

Изменить

Возможно, я неправильно понял вопрос.

Внутреннее значениеЭкземпляр даты javascript представляет собой временной клип UTC в миллисекундах.Таким образом, если utc является таким временем (например, 2012-08-19T00: 00: 00Z равно 1345334400000), тогда OP создаст экземпляр даты на основе этого значения, а toLocaleTimeString покажет зависящую от реализации строку местного времени.для предоставленного времени UTC.

Так, если местное смещение часового пояса, скажем, -6 часов, тогда alert(new Date(1345334400000))) покажет что-то вроде Сб 18 августа 2012 18:00:00 GMT-600 .

Я предполагал, что OP хотел установить местное время в то же время, что и время UTC, например, что 2012-08-19T00: 00: 00Z станет 2012-08-19T00: 00: 00 локальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...