如前所述,strtotime不考虑locale。但是,您可以使用strptime(参见http://ca1.php.net/manual/en/function.strptime.php),因为根据文档: Month and weekday names and other language dependent strings respect the current locale set with setlocale() (LC_TIME). 请注意,根据您的系统、区域设置和编码,您必须考虑重音字符。
<?php
// For example, I get the name of the month from a
// date "1 January 2015" and set him (with different languages):
echo month_to_number('January').PHP_EOL; // returns "01" (January)
echo month_to_number('Января', 'ru_RU').PHP_EOL; // returns "01" (January)
echo month_to_number('Мая', 'ru_RU').PHP_EOL; // returns "05" (May)
echo month_to_number('Gennaio', 'it_IT').PHP_EOL; // returns "01" (January)
echo month_to_number('janvier', 'fr_FR').PHP_EOL; // returns "01" (January)
echo month_to_number('Août', 'fr_FR').PHP_EOL; // returns "08" (August)
echo month_to_number('Décembre', 'fr_FR').PHP_EOL; // returns "12" (December)
9条答案
按热度按时间huwehgph1#
如前所述,
strtotime
不考虑locale。但是,您可以使用strptime
(参见http://ca1.php.net/manual/en/function.strptime.php),因为根据文档:Month and weekday names and other language dependent strings respect the current locale set with setlocale() (LC_TIME).
请注意,根据您的系统、区域设置和编码,您必须考虑重音字符。
yvgpqqbh2#
法国的月份是:
janvier février mars avril mai juin juillet août septembre octobre novembre décembre
因此,对于非常特殊的情况,月份在法语中可以使用
如果你用英语传递$date_string,函数不会中断,因为它不会做任何替换。
bfhwhh0e3#
从docs
将任何英语文本日期时间描述解析为Unix时间戳
编辑:六年过去了,关于strtotime()为什么不适合当前问题的解决方案的旁注变成了公认的答案😲
为了更好地回答这个问题,我想重复一下Marc B的回答:尽管遭到了反对,但date_create_from_format与自定义的Month解释器相结合将提供最可靠的解决方案
然而,目前看来,PHP中仍然没有内置国际日期解析的灵丹妙药。
nukf8bse4#
使用
strftime
时,此方法应该适用:strftime
qpgpyjmq5#
解决这一问题的关键是将外国语篇表征转换为英语对应物。我也需要这个,所以在已经给出的答案的启发下,我写了一个很好的和干净的函数,它将用于检索英语月份名称。
您也可以针对一周中的几天以及任何其他区域设置来调整此设置。
omtl5h9j6#
我写了一个简单的函数部分解决了这个问题。它不作为完整的**strtotme()**工作,但它确定日期中月份名称的数量。
同样,我们可以继续确定一周中的数字和日期等。
功能:
fdbelqdn7#
将其添加为Marco Demaio answer的扩展版本。添加了法语星期和月份缩写:
qacovj5a8#
它是区域设置相关的。如果每次解析都要检查每种语言,那么即使是最简单的日期字符串也要花很长时间才能解析。
如果你有一个已知格式的字符串,可以考虑使用date_create_from_format(),这样效率更高,打印错误更少
0h4hbjxa9#
在转换之前尝试设置区域设置: