Ошибка с strtotime PHP - PullRequest
       24

Ошибка с strtotime PHP

6 голосов
/ 30 июня 2011
echo date("m", strtotime("january"));

Возвращает 01 как ожидалось

echo date("m", strtotime("february"));

Но это возвращает 03

Кто-нибудь еще сталкивался с этой проблемой?

PHP версия 5.1.6

Ответы [ 2 ]

24 голосов
/ 30 июня 2011

Сегодня 29-е. В феврале этого года нет 29-го числа, и, поскольку вы не указываете день в феврале, он использует «сегодня». Функция strtotime использует относительные даты, поэтому 29 февраля в основном это 1 марта этого года.

Для решения вашей проблемы:

echo date("m", strtotime("February 1"));
0 голосов
/ 30 июня 2011

Поскольку strtotime () обрабатывает только английские форматы дат, вам, возможно, следует попробовать использовать эту функцию, которую я только что сделал для вас.При этом вы можете обрабатывать названия месяцев и на других языках.

Не знаю, важно ли это для вашего приложения, но теперь у вас есть это.

function getMonth($month, $leadingZero = true) {
    $month = strtolower(trim($month)); // Normalize

    $months = array('january' => '1',
                    'february' => '2',
                    'march' => '3',
                    'april' => '4',
                    'may' => '5',
                    'june' => '6',
                    'july' => '7',
                    'august' => '8',
                    'september' => '9',
                    'october' => '10',
                    'november' => '11',
                    'december' => '12',
                    'dezember' => '12', // German abrevation
                    'marts' => '3', // Danish abrevation for March 
                   );

    if(isset($months[$month])) {
        return $leadingZero ? substr('0' . $months[$month], -2) : $months[$month];
    } else {
        return false;
    }
}
...