Т.е.
Month Returns
January 1
February 2
March 3
April 4
May 5
June 6
July 7
August 8
September 9
October 10
November 11
December 12
Я видел, что примеры используют mktime, при предоставлении числа месяца и возврата строки месяца, но не реверса.
Попробуйте
echo date('n', strtotime('November')); // returns 11
Если вам приходится делать это часто, вы можете подумать об использовании массива с жестко запрограммированными значениями:
$months = array( 1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April',
5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August',
9 => 'September', 10 => 'October', 11 => 'November',
12 => 'December');
Также можно наоборот, используя имена для ключей и числа для значений.
С именами для значений, которые вы используете
echo array_search('November', $months); // returns 11
, и с именами для ключей, которые вы используете
echo $months['November']; // returns 11
Я считаю, что использование чисел для ключей несколько лучше в целом , хотя для вашего UseCase имена для ключей подход, вероятно, более удобный. Имея всего 12 значений в массиве, не должно быть большой разницы между подходами к массиву.
Быстрый тест показал разницу в 0,000003 с против 0,000002 с, тогда как преобразование времени на моем компьютере занимает 0,000060 с (читай: на другом компьютере может отличаться).
$months = array('January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December', );
foreach ($months as $m) {
echo $m."=".date('n', strtotime($m))."<br>";
};
А как насчет использования strtotime ()
для преобразования ноября
в метку времени, а затем даты ()
с форматом n
для получения соответствующего числа:
$ts = strtotime('november');
echo date('n', $ts);
Дает следующий результат:
11
И, просто для удовольствия, часть кода, например, следующий:
$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', );
foreach ($months as $m) {
$ts = strtotime($m);
echo $m . ' : ' . date('n', $ts) . '<br />';
}
предоставит вам список всех месяцев с соответствующими числами, показывая, что эта идея будет работать все 12 месяцев, а не только ноябрь; -)
В зависимости от вашего сценария, вероятно, наиболее эффективным решением будет создание ассоциативного массива типа:
$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);
И тогда ваш поиск будет очень простым:
$month = "Nobember";
$monthNumber = $months[strtolower($month)];
Не могу представить, что это более эффективно, но это работает
$t = strtotime("March");
echo date('n',$t);
Единственное, о чем я могу придумать, - это установить каждую строку как переменную и сделать ее = соответствующей количество. Но опять же, я новичок, поэтому мне не терпится узнать, есть ли какие-нибудь более простые способы (=