2017-03-17 59 views
2

我遇到了一個奇怪的問題,這是一個更大的問題的道路上的原因。我將定義最初的問題(這不是一個真正的問題),接下來是由它引發的問題。Javascript日期對象不同Mac和PC之間

我有一個JavaScript功能限定日期變量並且將其作爲數據在後請求的PHP函數:

var currentdate = new Date(); 

var showDailyEvents = function() { 
    $.post(
     '/php/returnEvents.php', 
     { 
      myDate: currentdate, 
      period: "daily" 
     }, 
     "html" 
    ); 
}; 

showDailyEvents(); 

當我的MAC(在所有瀏覽器)上運行此,的currentdate是「2017年3月17日星期五15:37:29 GMT-0700(PDT)」。但是,當我在PC上運行它時(特別是Windows 7),當前日期爲「2017年3月17日星期五15:37:29 GMT-0700(太平洋夏令時)」。當這個變量傳遞到PHP函數,我嘗試將其轉換爲一個時間戳,像這樣:

$startDay = strtotime($_POST['myDate']); 

但是,當我檢查變量,在蘋果它是PC則返回假1489790249一會兒。兩臺計算機上變量之間的唯一區別是PDT與太平洋夏令時間。

有沒有人遇到過這個問題?或者有任何想法如何正確解決這個問題?

編輯:請注意,我需要

+1

爲什麼不讓客戶給你發送時間戳? http://stackoverflow.com/questions/221294/how-do-you-get-a-timestamp-in-javascript – Webbanditten

+0

@Webbanditten我可能會誤解,但不是我爲什麼這麼做?新的Date()對象正在客戶端的瀏覽器上創建,然後在請求中發送。 – ConorBaumgart

+0

不,你在完整的日期解析爲一個字符串與時區信息到一個PHP方法,然後將文本轉換爲Unix時間戳。 http://php.net/manual/en/function.strtotime.php我在想,PHP方法不喜歡Windows字符串,因此我的想法是將日期轉換爲Unix時間戳,然後將其發送到服務器。 – Webbanditten

回答

0

你應該堅持傳遞的日期/時間字符串,DateTime有明確的日期格式的「星期五」一部分可能是一個選項:

<?php 

$arr = array(
    'Fri Mar 17 2017 15:37:29 GMT-0700 (PDT)', 
    'Fri Mar 17 2017 15:37:29 GMT-0700 (Pacific Daylight Time)' 
); 

foreach($arr as $val){ 
    $d = DateTime::createFromFormat('D M d Y H:i:s O+', $val); 
    if($d !== false){ 
     echo $val . ": " . $d->getTimeStamp() . "\n"; 
    } 
} 
?> 

這產生:

Fri Mar 17 2017 15:37:29 GMT-0700 (PDT): 1489790249 
Fri Mar 17 2017 15:37:29 GMT-0700 (Pacific Daylight Time): 1489790249 

這裏,+在格式規範意味着輸入的其餘部分被跳過時區SPE後所以不管涉及cification(O)被有效地忽略。