Числовое представление ISO-8601 дня недели («N») в PHP с использованием функции date () всегда возвращает 3 - PullRequest
0 голосов
/ 04 октября 2011

Попытка получить числовое представление ISO-8601 дня недели («N») в PHP с помощью функции date (); однако он продолжает возвращать «3» независимо от того, какой день я использую с mktime ().

<?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 ]

4 голосов
/ 04 октября 2011

Вы не должны вводить строку даты во второй аргумент для date(), это должно быть целое число, содержащее метку времени Unix (значение, возвращаемое из mktime()).См. date() документацию .

$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() не может работать со значением и возвращается к использованию эпохи Unix (0 timestamp), которая составляет 1 января 1970 года. Кроме того, сообщение E_NOTICE с указанием " не правильно сформированного числового значениявстречается в [file] в строке [line]".

0 голосов
/ 04 октября 2011

PHP пытается интерпретировать строку, сгенерированную date( "Y-m-d H:i:s", mktime(0, 0, 0, 9, 16, 2011) );, как дату, но PHP использует секунды, начиная с эпохи, как время данных. Вы можете просто передать результат mktime во второй вызов функции data следующим образом:

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