date () только год от даты в формате YYYY-00-00 - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь сделать это echo date("Y", strtotime("1999-00-00"));, но вместо 1999 возвращается 1998.Есть ли способ, как справиться с этим?Я бы предпочел «чистый путь», а не что-то вроде $finalYear = (float)$year+1 и т. Д. Формат даты ДОЛЖЕН быть YYYY-00-00 (с нулями)

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

Если вы абсолютно уверены, что формат даты никогда не изменится, вам лучше воспользоваться

echo substr('1999-00-00', 0, 4);

вместо того, чтобы нести большие издержки strtotime () и обходить всю подсистему даты / времени.

Когда вы сообщаете PHP-функциям даты, что месяц / день равны 0, что является «недействительным», оно преобразует их в соответствующие «предыдущие» значения.

, например

1999-00-10 is actually 1998-12-10
1999-11-00 is actually 1999-10-31

и так далее. Это как сказать «вчера» или «в прошлом месяце». аналогично, указание 13 месяца делает его

1999-13-01 is actually 2000-01-01
2 голосов
/ 23 февраля 2012

Это может быть потому, что 00 недопустимый месяц. Самый ранний месяц будет 01. То же самое с днем.

echo date('Y', strtotime('1999-01-01'));

Возможно, следует вносить изменения, когда бы вы ни извлекали дату, которую пытаетесь проанализировать?

1 голос
/ 23 февраля 2012

Поскольку первый законный день года - ГГГГ-01-01, я думаю, что «нечистый» способ, который вы цитировали, здесь совершенно оправдан.

Или, может быть, еще лучше просто извлечь первые четыре цифры с помощью substr (), если аргумент strtotime () - это то, что вы получили из пользовательского ввода.

0 голосов
/ 23 февраля 2012

Единственный способ получить 1999 год -

echo date( "Y", strtotime( "1999" ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...