我在网站上有一个倒数计时器(它作为当天发货倒数计时器,所以访问者知道他们是否下了订单,如果他们在时间窗口内,它将在今天发货。)基本上计时器只是在星期一到星期五到下午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);
}
}
答案 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()
玩得开心!