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

#php #date #dayofweek #mktime

#php #Дата #день недели #mktime

Вопрос:

Пытаюсь получить числовое представление 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

Комментарии:

1. Когда простые вещи не работают, прочитайте документацию. Функция date() принимает временную метку; вы передаете ей строку. Смотрите ответ salathe ниже.

Ответ №1:

Вы не должны вводить строку даты во второй аргумент for 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 временной метки), которая равна 1 января 1970 года. Кроме того, выдается E_NOTICE сообщение о том, что «Неправильно сформированное числовое значение встречается в [file] в строке [line]«.

Ответ №2:

PHP пытается интерпретировать строку, сгенерированную date( "Y-m-d H:i:s", mktime(0, 0, 0, 9, 16, 2011) ); как дату, но PHP использует секунды, начиная с эпохи, в качестве даты. Вы можете просто передать результат 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"