Функция PHP date (), возвращающая неправильное значение после смены часов - PullRequest
0 голосов
/ 31 октября 2011

У меня есть простая функция для преобразования месяца из его числа в имя, т.е. с 10 на октябрь

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month));

    return $month;
}

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

Я пытался определить часовой пояс с помощью date_default_timezone_set, но все равно ничего.

Что странно, если вы передаете функцию 10, она возвращает октябрь, но передает его 11 или 12, возвращает декабрь, 1, январь, 2 и 3 возвращает март и т. Д.

Я предполагаю, что должно быть довольно простое исправление, но, похоже, нигде не могу найти ответ,

любая помощь будет оценена,

спасибо.

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Просто укажите для части дня и года любое действительное значение, и вы получите правильный результат:

<?php

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month, 10, 2010));

    return $month;
}

echo "1: " . convertToName(1) . "<br />";
echo "2: " . convertToName(2) . "<br />";
echo "3: " . convertToName(3) . "<br />";
echo "4: " . convertToName(4) . "<br />";
echo "5: " . convertToName(5) . "<br />";
echo "6: " . convertToName(6) . "<br />";
echo "7: " . convertToName(7) . "<br />";
echo "8: " . convertToName(8) . "<br />";
echo "9: " . convertToName(9) . "<br />";
echo "10: " . convertToName(10) . "<br />";
echo "11: " . convertToName(11) . "<br />";
echo "12: " . convertToName(12) . "<br />";

Это даст следующий результат:

1: January
2: February
3: March
4: April
5: May
6: June
7: July
8: August
9: September
10: October
11: November
12: December
1 голос
/ 31 октября 2011

Попробуйте пропустить день 1 ... php.net говорит, что 0 день месяца фактически является последним днем ​​предыдущего месяца

0 голосов
/ 31 октября 2011

Как указывает @OptimusCrime, это довольно сложный способ узнать месяц.

Я бы рассмотрел

/** @desc Converts a month number (1-12) to a name
    @return mixed the month name on success; false on failure 
*/

function convertToName($month) {  

    $months = array ("January", "February", ....); // you get the drift
    return (array_key_exists($month, $months) ? $months["month"] : false);

}

очевидно, это устраняет встроенную интернационализацию, которую потенциально может обеспечить date("F"), но мне лично нравится контролировать это в любом случае - вы часто не можете доверять серверу, чтобы установить определенный языковой стандарт.

...