我正在參與活動網站。我從本地主機上的MySQL數據庫獲取UTC時間,並使用PHP將它們回顯到頁面,然後使用Javascript將它們轉換爲用戶的時區。出於某種原因,Javascript給我的時間比我從MySQL獲得的時間晚了兩個小時。我和我的服務器都在Mountain Standard Timezone中,所以Javascript應該將日期推回六個小時,但是日期會延後八個小時。即使夏令時僅相差一小時,而不是兩小時。Javascript日期對象未針對時區偏移進行適當調整
下面是使用Javascript用於平移PHP時間戳的日期對象和YYYY-MM-DD HH輸出它:II:ss格式(用了jQuery):
function leadingzeros(string){
if (string.toString().length == 1){
string = "0" + string;
}
return string;
}
$(document).ready(function(){
var thisdate = new Date(<?php echo (strtotime($row['start'])*1000);?>);
$("#jsdate").html(
thisdate.getFullYear()+"-"+leadingzeros((thisdate.getMonth()+1))+"-"+ leadingzeros(thisdate.getDate())+" "+
leadingzeros(thisdate.getHours())+":"+leadingzeros(thisdate.getMinutes())+":"+leadingzeros(thisdate.getSeconds())
);
});
下面是文檔正文中的PHP :
<?php
$row = mysqli_fetch_assoc($result);
echo "<ul><li>MySQL datetime object: ".$row['start']."</li>".
"<li>PHP Unix timestamp: ".strtotime($row['start'])."</li>".
"<li>PHP date string: ".date("Y-m-d H:i:s",strtotime($row['start']))."</li>".
"<li>PHP date minus 6 hours (which is our timezone offset): ".date("Y-m-d H:i:s",strtotime($row['start']) - (6*3600))."</li>".
"<li>Javascript date: <span id='jsdate'></span></li></ul>";
?>
它輸出:
- MySQL的日期時間對象:2012-04-07二十三點00分00秒
- PHP Unix時間戳:1333832400
- PHP日期字符串:2012-04-07 23:00:00
- PHP日期減去6小時(這是我們的時區偏移量):2012-04-07 17:00:00
- javascript日期:2012-04-07 15:00:00
我讀過的文件中沒有得到答案。爲什麼Javascript日期在MST的PHP日期後兩個小時?
是你的服務器時間和客戶機時間一樣嗎?如果是的話,時區也是一樣的? – nandu 2012-04-07 19:09:10
試試這裏:http://jsfiddle.net/wQMTu/ - 你看到了什麼? – Alexander 2012-04-07 19:46:04
不是答案,但這可能有所幫助:我建議您以UTC存儲和傳輸時間值,並且只有在他們將顯示給用戶時,將其轉換爲本地時間。如果你這樣做,那麼無論你的服務器是MST還是你的瀏覽器是(其他任何東西)都沒關係。它可以幫助消除一大類錯誤。它可以使重新託管更簡單。等等。 – Cheeso 2012-04-07 19:51:09