有以下簡單的PHP代碼:PHP將日期使用日期時間減少1天到標記 - 怪異
$day = '2013-05-04';
$disp_day = DateTime::createFromFormat('U', strtotime($day));
echo $day . " " . $disp_day->format('F j');
它輸出
2013-05-04 May 3
但$disp_date
應該在5月4右?
有以下簡單的PHP代碼:PHP將日期使用日期時間減少1天到標記 - 怪異
$day = '2013-05-04';
$disp_day = DateTime::createFromFormat('U', strtotime($day));
echo $day . " " . $disp_day->format('F j');
它輸出
2013-05-04 May 3
但$disp_date
應該在5月4右?
這是一個時區問題。
strtotime
將給你一個時區敏感時間戳,而createFromFormat
與U
參數將把時間戳解釋爲GMT。
我猜你的時區是印度(格林威治標準時間+5.5)。因此,strtotime("2013-05-04")
會給你一個時間戳,在印度是2013-05-04 00:00
。但是,在格林威治標準時間早5個半小時的時候,時間爲2013-05-03 18:30
。
然後,您將此印度時間戳作爲GMT傳遞給CreateFromFormat,從而導致轉換。
沒有必要在這裏使用strtotime
都沒有:只有做
DateTime::createFromFormat('Y-m-d', $day);
非常感謝。 +1 – SaidbakR 2013-05-05 08:25:03
將字符串日期'2013-05-04'轉換爲DateTime對象而不經歷時區麻煩的最佳方式是什麼? – emaillenin 2013-05-05 08:28:10
@emaillenin編輯答案 – 2013-05-05 08:29:51
時區的時區! – 2013-05-05 08:20:26
@Pekka웃請詳細解釋... – SaidbakR 2013-05-05 08:21:34