将javascript Date()转换为UTC和偏移时间

时间:2014-01-30 04:46:29

标签: javascript datetime

我在网站上有一个倒数计时器(它作为当天发货倒数计时器,所以访问者知道他们是否下了订单,如果他们在时间窗口内,它将在今天发货。)基本上计时器只是在星期一到星期五到下午5点倒计时,然后在“0”(午夜,24小时制)再次开始,这一切都在工作。

然后我意识到,由于时间是客户端(javascript)PST时区的访问者将看到与他们应该看到的(商店是东方)相比的错误时间。

不幸的是我无法使用php或任何服务器端从服务器获取时间,所以它必须是javascript(转换为UTC和偏移)。

据我所知,我对变量做错了,可能更多,有人可以告诉我我错误的设置是什么吗? (它在我的控制台中没有显示任何错误。)

if (document.getElementById('countdownTimer')) {
    pad = function(n, len) { // leading 0's
        var s = n.toString();
        return (new Array( (len - s.length + 1) ).join('0')) + s;
    };
    function calcTime(offset) {

        // create Date object for current location
       var d = new Date();

        // convert to msec
        // add local time zone offset 
        // get UTC time in msec
        utc = d.getTime() + (d.getTimezoneOffset() * 60000);
        offset = -5.0;  
        var now = utc + (3600000*offset);


    function countDown() {
       //var now = new Date();
        if ( (now.getDay() >= 1) && (now.getDay() <= 5) ) { // Monday to Friday only
            var target = 17; // 15:00hrs is the cut-off point
            if (now.getHours() < target) { // don't do anything if we're past the cut-off point
                var hrs = (target - 1) - now.getHours();
                if (hrs < 0) hrs = 0;
                var mins = 59 - now.getMinutes();
                if (mins < 0) mins = 0;
                var secs = 59 - now.getSeconds();
                if (secs < 0) secs = 0;
                var str = '<span id="day">00</span><span id="hour">' + pad(hrs, 2) + '</span><span id="minute">' + pad(mins, 2) + '</span><span id="second">' + pad(secs, 2) + '</span>';
                document.getElementById('countdownTimer').innerHTML = str;
            }
        }
    }
    var timerRunning = setInterval('countDown()', 1000);
}
}

2 个答案:

答案 0 :(得分:2)

我在以下几行中看到了:

    // convert to msec
    // add local time zone offset 
    // get UTC time in msec
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);
    offset = -5.0;  
    var now = utc + (3600000*offset);

您要将now变量创建为数字,然后在函数countDown()中将其用作日期对象。   您应该将now var创建为这样的日期

var now = new Date(utc + (3600000*offset));

答案 1 :(得分:0)

我这样做是为了在node.js中设置一个expires头...这就是我做的:

res.setHeader("Expires", new Date(Date.now() + 345600000).toUTCString());

对于另一个应用程序,您可以采用不同的方式:

var updated_date = new Date(Date.now() + 345600000, //miliseconds
    utc_date = updated_date.toUTCString()

玩得开心!