Javascript - Unix Time для определенного часового пояса - PullRequest
0 голосов
/ 25 июня 2009

Я работаю со службой, которая дает мне время трансляции для телешоу в Unix Time (секунды с полуночи 1 января 1970 года в Гринвиче, Англия). Мне нужно преобразовать это, в javascript, в восточное стандартное время (США). Мне нужно учитывать летнее время и тот факт, что часы клиента могут быть настроены на время, отличное от времени по восточному стандарту. Я уверен, что этот код был написан ранее. Кто-нибудь может указать мне на это?

Ответы [ 3 ]

3 голосов
/ 25 июня 2009

Что вы обнаружите, так это то, что невозможно перевести на определенный часовой пояс, но пока ваши пользователи находятся в нужном часовом поясе, это будет работать:

var date = new Date();
date.setTime(unixTime * 1000);

Полученный объект даты будет отображаться в часовом поясе компьютера, на котором запущен браузер:

window.console.log(date.toString())

выходы:

"Thu Jun 25 2009 09:48:53 GMT-0400 (EDT)" 

для меня все равно)

0 голосов
/ 27 июня 2009

Я написал некоторый код, который будет превращать миллисекунды по Гринвичу в объект типа даты, который можно запрашивать для значений времени по восточному стандартному времени. Он обрабатывает летнее время.

ESTDate = function(millis){

    if(isNaN(parseInt(millis))) {
        throw new Error("ESTDate must be built using a number");
    }

    var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
    var gmtDate = new Date(millis);

    var clockSetDate = function(month){

        var date = new Date(0);
        date.setUTCFullYear(gmtDate.getUTCFullYear());
        date.setUTCMonth(month);
        date.setUTCHours(2);

        while(date.getUTCDay() != "0"){
            date.setTime(
                date.getTime() + MILLIS_PER_DAY
            );  
        };
        return date;
    }

    var startStandarTimeDate = clockSetDate(2);
    var endStandardTimeDate = clockSetDate(10);
    date = new Date(millis);
    var estOffset = 60 * 60 * 1000 * 4;
    var dltOffset = (
            (startStandarTimeDate < date) && 
            (date < endStandardTimeDate)
        ) ? 0: 60 * 60 * 1000;
    date.setTime(date.getTime() - (estOffset + dltOffset));
    var self = { 

        getDate: function(){
            return date.getUTCDate();
        },
        getDay:function(){
            return date.getUTCDay();
        },
        getFullYear:function(){
            return date.getUTCFullYear();
        },
        getHours:function(){
            return date.getUTCHours();
        },
        getMilliseconds:function(){
            return date.getUTCMilliseconds();
        },
        getMinutes:function(){
            return date.getUTCMinutes();
        },
        getMonth:function(){
            return date.getUTCMonth();
        },
        getSeconds:function(){
            return date.getUTCSeconds();
        }
    }
    return self;
}
0 голосов
/ 25 июня 2009

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6016329.html

Похоже, у вас есть решение для изменения часовых поясов, но похоже, что вы должны делать математику самостоятельно. Метод setTimezone или setLocale отсутствует.

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