2013-05-05 42 views
2

有以下簡單的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右?

+3

時區的時區! – 2013-05-05 08:20:26

+0

@Pekka웃請詳細解釋... – SaidbakR 2013-05-05 08:21:34

回答

5

這是一個時區問題。

strtotime將給你一個時區敏感時間戳,而createFromFormatU參數將把時間戳解釋爲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); 
+0

非常感謝。 +1 – SaidbakR 2013-05-05 08:25:03

+0

將字符串日期'2013-05-04'轉換爲DateTime對象而不經歷時區麻煩的最佳方式是什麼? – emaillenin 2013-05-05 08:28:10

+0

@emaillenin編輯答案 – 2013-05-05 08:29:51