Бонкеры PHP месяцев? - PullRequest
       6

Бонкеры PHP месяцев?

2 голосов
/ 30 марта 2011

Вот базовый сценарий проверки концепции:

<?php
for($i = 1; $i < 13; $i++)
{
    echo 'Using ' . $i . ' | ';
    echo date('F', mktime(0,0,0,$i)) . " | ";
    echo date('F', strtotime('2011-' . $i . '-01')) . "<br />";
}

И вывод, который я получаю:

Using 1 | January | January
Using 2 | March | February
Using 3 | March | March
Using 4 | April | April
Using 5 | May | May
Using 6 | June | June
Using 7 | July | July
Using 8 | August | August
Using 9 | September | September
Using 10 | October | October
Using 11 | November | November
Using 12 | December | December

Что случилось с февралем ??

Это убивает меня, так как он просто перестал показывать февраль и начал показывать март.

Ответы [ 4 ]

10 голосов
/ 30 марта 2011

Вы используете mktime() неправильно.

int mktime ([ int $hour = date("H") 
            [, int $minute = date("i") 
            [, int $second = date("s") 
            [, int $month = date("n") 
            [, int $day = date("j")  <------------ here 
            [, int $year = date("Y") <------------ and here
            [, int $is_dst = -1 ]]]]]]] )

Если вы не укажете $day и $year, по умолчанию они будут сегодняшняя дата .

Сегодня 30-е число, которого нет в феврале.

Это будет работать:

echo date('F', mktime(0,0,0,$i,1,2011)) . " | "; 
3 голосов
/ 30 марта 2011

Довольно просто - вы запускаете это 29, 30 или 31 месяца. mktime(0,0,0,2) на самом деле mktime(0,0,0,2,date('j'),date('Y')), который в сегодняшнем случае попытался бы создать 30 февраля 2011 года, то есть 2 марта.

1 голос
/ 30 марта 2011

Из руководства :

Аргументы могут быть опущены в порядке справа налево; любые аргументы таким образом опущен будет установлен на текущий значение в соответствии с местной датой и время.

Таким образом, он устанавливает пятый аргумент для текущего дня (30 здесь). Это означает, что он добавляет к дате, так как 30 февраля является недопустимым днем ​​и делает его маршем.

0 голосов
/ 30 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...