2013-03-13 204 views
4

我有下面的格式輸出日期變量:將日期轉換爲日期名稱週一,週二,週三

201308131830 

這是2013 - 月 - 13 - 18:30

我使用這個檢索天名稱,但它得到錯誤的日子:

$dayname = date('D', strtotime($longdate)); 

任何想法我做錯了什麼?

+1

這個日期不是'timestamp'是'YYYYMMDDHHII' – 2013-03-13 14:49:49

+0

這只是一個數字。時間不是心理上的,不能「猜測」數字的表現。 **我們**可以看到它可能是'yyyymmddhhmmss',但是strtotime不能。請改用date_create_from_format()。或轉換成正確的格式'2013年8月13日18:30',這可以通過的strtotime – 2013-03-13 14:50:39

回答

13

這是當你的日期和時間存儲在一個非標準格式會發生什麼。與他們合作成爲問題。

$datetime = DateTime::createFromFormat('YmdHi', '201308131830'); 
echo $datetime->format('D'); 

See it in action

+0

大處理謝謝 – user1444027 2013-03-13 14:58:33

+0

更新演示使用新的小提琴 – 2017-09-13 13:42:53

+0

好像你可以使用小寫使用PHP日期函數「L」格式字符產生相同的結果。[點擊這裏查看PHP日期()doc](http://php.net/manual/en/function.date.php)。 – plaidcorp 2017-10-04 19:13:52

1

不能使用strtotime爲你的時間格式不supported date and time formats of PHP.

爲此範圍內,你必須先創建一個有效的日期格式利用的createFromFormat function

//creating a valid date format 
$newDate = DateTime::createFromFormat('YmdHi', $longdate); 

//formating the date as we want 
$finalDate = $newDate->format('D'); 
+0

非常感謝你 – user1444027 2013-03-13 14:57:36

1

您的代碼適用於我。

$input = 201308131830; 
echo date("Y-M-d H:i:s",strtotime($input)) . "\n"; 
echo date("D", strtotime($input)) . "\n"; 

輸出:

2013-Aug-13 18:30:00 
Tue 

然而如果傳遞201308131830作爲它是50到100倍大於可以由32位整數表示。 [依賴於你的系統的具體實施。如果您的服務器/ PHP版本不支持64位整數,則數目會溢出,可能最終會被作爲一個負數輸出和date()將默認爲Jan 1, 1970 00:00:00 GMT

請確定無論您從中檢索此數據的來源是否將該日期返回爲字符串,並將其保留爲字符串。

+0

很好的解釋,謝謝Sam – user1444027 2013-03-13 15:03:11

6

您的代碼對我的作品

$date = '15-12-2016'; 
$nameOfDay = date('D', strtotime($date)); 
echo $nameOfDay; 

使用升而不是d,如果你喜歡的名字的完整的文本格式

+0

感謝這段代碼爲我工作 – 2017-10-17 16:26:54