2009-07-22 85 views
1

我正在使用日期函數和strtotime函數來格式化日期。當使用具有時間函數的日期函數時,日期問題在日期函數

例:

<?php 
$input_date = '03-JUL-09 14:53'; 

$formatted_date = date("Y-m-d H:i:s", strtotime($input_date)); 

echo $formatted_date; 
?> 

給我一個預期輸出:2009-07-03 14:53:00

而如果輸入更改爲(我去掉分鐘部分) -

<?php 
$input_date = '03-JUL-09 14'; 

$formatted_date = date("Y-m-d H:i:s", strtotime($input_date)); 

echo $formatted_date; 
?> 

輸出這裏是1970-01-01 5點30分零零秒,這是不是在所有的預期。

什麼是我正在做的錯誤以及如何修復它。

由於

阿米特

回答

1

這看起來像是由於strtotime()無法確定哪些數字在第二個日期字符串中是什麼。

我最好的建議是在將它傳遞給strtotime()之前對日期時間值進行規範化。一些簡單的像,這可能是不夠

if (false === strpos($input_date, ':')) 
{ 
    $input_date .= ':00'; 
} 
0

1970-01-01是一個典型的基線日期(在ctime例如)。我相信輸出格式化爲一個日期的0值,因此1970,和不相關的05:30:00時間。

我相信這是一種僥倖,試圖格式化一個不包含所有請求的時間元素的日期。你能填充日期數據以生成完整的輸入日期嗎?

0

strtotime()當您刪除分鐘部分時,無法解析第二個字符串。它不知道額外的「14」是什麼意思,所以它返回bool(false)。調用date(false)返回的結果與date(0)相同,即它給出了UNIX時期的日期:1970年1月1日00:00:00 GMT爲當地時區進行了調整。

1

03 - 09年7月14似乎不是一個有效的日期字符串,03 - 09年7月14:00正常工作

從PHP手冊:的strtotime - 解析任何英文文本的日期時間描述爲Unix時間戳

2

1970-01-01五時三十分00秒是在Unix紀元(1970-01-01 00:00印度時間: 00 GMT/UTC)。這意味着strtotime返回0false,它被date轉換爲0。正如其他人所解釋的那樣,這是因爲它無法處理其投入。

2

函數strtotime期望給定一個包含美國英語日期格式的字符串,並將嘗試將該格式解析爲Unix時間戳。 您可以使用字符串像

  • 2009年7月
  • 現在
  • 03年9月7日
  • 03年9月7日14:00:00
  • 1周03 2日4鐘頭2秒
  • 上週一

但不是不完整的日期格式,如「03年9月7日14」。解析器不理解它,並且不會返回任何內容,因此當您調用date("Y-m-d H:i:s", strtotime($input_date));時,它將返回0時間戳(1970年1月1日00:00:00 UTC),因爲它是默認值。

你必須給出一個可以解析的正確字符串。

+0

謝謝大家.. – Amit 2009-07-23 07:53:38