使用date()函数的PHP中星期几(“N”)的ISO-8601数字表示总是返回3

时间:2011-10-04 19:05:54

标签: php date dayofweek mktime

尝试使用date()函数获取PHP中星期几(“N”)的ISO-8601数字表示;但是,无论我使用mktime()的哪一天,它都会一直返回“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

2 个答案:

答案 0 :(得分: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消息指出“在[line] [line] “[file]中遇到一个非正确形成的数值。

答案 1 :(得分: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"