#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"