2011-10-04 20 views
-1

嘗試獲取星期幾(「N」)的ISO-8601數字表示形式在PHP中使用date()函數;但是,無論我在mktime()使用哪一天,它都會返回「3」。在PHP中使用date()函數總是返回3的日期(「N」)的ISO-8601數字表示形式返回3

<?php 

$date = date("Y-m-d H:i:s", mktime(0, 0, 0, 9, 16, 2011)); 
//$date = date("Y-m-d H:i:s", mktime(0, 0, 0, 9, 17, 2011)); 

print_r(date('N', $date)); 

?> 

輸出:3

+1

當簡單的東西不起作用時,請閱讀文檔。 date()函數需要一個時間戳;你傳遞一個字符串。請參閱下面的salathe的答案。 –

回答

0

PHP試圖解釋由date("Y-m-d H:i:s", mktime(0, 0, 0, 9, 16, 2011));生成的字符串作爲日期,但PHP使用自epoch以來的秒作爲數據時間。您可以將mktime的結果傳遞到第二個數據函數調用中,如下所示:

$dateTime = mktime(0, 0, 0, 9, 16, 2011) 
$date = date("Y-m-d H:i:s", $dateTime); 
echo date('N', $dateTime); 
// results in "5" 
4

不應喂日期字符串成用於date()第二個參數,它應爲包含Unix時間戳的整數(從mktime()返回的值)。請參閱date() documentation

$date = mktime(0, 0, 0, 9, 16, 2011); 
var_dump(date('N', $date)); // string(1) "5" 

與原有代碼:

$date = date("Y-m-d H:i:s", mktime(0, 0, 0, 9, 16, 2011)); 
print_r(date('N', $date)); 

$date值是"2011-09-16 00:00:00"。這不是一個整數,當然不是該日期/時間的Unix時間戳;因此,date()不能使用該值並且恢復爲使用1970年1月1日的Unix時期(0時間戳)。此外,E_NOTICE消息說明「在[文件]行中遇到的非正確形成的數值[行]「已發佈。