在PHP给出一个月份字符串,如"十一月",如何在不使用12部分switch语句的情况下返回11?

sto*_*ist 8 php date mktime

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
Run Code Online (Sandbox Code Playgroud)

我已经看到了在给出月份数并返回月份字符串时使用mktime的示例,但不是相反的.

Gor*_*don 22

尝试

echo date('n', strtotime('November')); // returns 11
Run Code Online (Sandbox Code Playgroud)

如果必须经常这样做,您可以考虑使用具有硬编码这些值的数组:

$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');
Run Code Online (Sandbox Code Playgroud)

也可以反过来使用键的名称和值的数字.

使用您所做的值的名称

echo array_search('November', $months); // returns 11
Run Code Online (Sandbox Code Playgroud)

以及你所做的钥匙的名称

echo $months['November']; // returns 11
Run Code Online (Sandbox Code Playgroud)

我发现通常使用键的数字会更好一些,但对于您的UseCase,键的名称方法可能更舒适.如果数组中只有12个值,则数组approches之间应该没有太大区别.

快速基准测试显示0.000003s与0.000002s的差异,而我的计算机上的时间转换需要0.000060s(读取:在其他计算机上可能不同).

  • 对于那些喜欢玩对象的人,PHP 5.3给我们带来了`DateTime :: createFromFormat('F',$ month) - > format('n')` (2认同)

Pas*_*TIN 7

如何使用strtotime()转换November为时间戳,然后,date()使用n格式的函数来获取相应的数字:

$ts = strtotime('november');
echo date('n', $ts);
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

11
Run Code Online (Sandbox Code Playgroud)


而且,只是为了好玩,一部分代码如下所示:

$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 />';
}
Run Code Online (Sandbox Code Playgroud)

会给你一个月的清单及相应的数字 - 显示这个想法将适用于所有12个月,而不仅仅是11月;-)


Fle*_*ore 5

我无法想象这会更有效率,但它确实有效

$t = strtotime("March");
echo date('n',$t);
Run Code Online (Sandbox Code Playgroud)