我在網站上有一個倒數計時器(它充當同一天發貨倒計時器,因此訪問者知道他們是否下了訂單,如果他們今天發貨)。基本上,計時器在星期一至星期五倒數至下午5點,然後以「0」(午夜,24小時)重新開始,這一切都正常。將JavaScript日期()轉換爲UTC和抵消時間
然後我意識到,因爲時間是客戶端(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);
}
}
大多數服務器發出ajax HEAD請求可以獲取的Date標頭。你也可以從5 * 3600000中減去它們的偏移量以得到他們的時間與E.S.T.之間的差值。 – dandavis
@dandavis這是一個很大的商業託管網站,所以我不確定他們是如何配置的。我知道他們的API不會返回商店時區。 –
您可以轉到javascript在Chrome上運行的頁面,按F11,然後按F5,單擊網絡選項卡,單擊第一個輸入行,然後單擊標題以看看日期是否在其中。如果是的話,那麼谷歌「阿賈克斯頭標題」。 – dandavis