我正在努力创造一些聪明的东西,以便以任何国际格式解析日期。
在我的前端,我使用jquery ui作为日期选择器,每种语言都有其特定的日期格式。
Fr:d / m / Y. 恩:m / d / Y. ...
好的但是现在在php部分我必须使用相同的格式存储这些日期(Mysql Y-m-d)。我想避免使用switch case和类似的东西,所以我开始寻找另一种选择。
我发现的最好的事情是
http://www.php.net/manual/en/datetime.createfromformat.php如果我知道格式,该函数将使我能够解析日期。
例如
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
好的,这是一个好的开始,但现在我想找到当前语言环境的标准日期格式。
所以我发现了这个:
http://www.php.net/manual/en/intldateformatter.getpattern.php
但我真的不知道如何让它发挥作用,因为我得到了不可思议的结果:
php > $i = new IntlDateFormatter("fr_FR.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE);
php > echo $i->getPattern();
dd/MM/yy
/* correct ! */
但
php > $i = new IntlDateFormatter("en_US.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE);
php > echo $i->getPattern();
M/d/yy /* wtf */
我错过了什么吗?
由于
答案 0 :(得分:1)
没有“通用日期格式符号标准”。符号“y”可以是2位数年份,4位数年份,甚至3个字母缩写月份(极不可能),具体取决于来源。
IntlDateFormatter
的格式符号记录在案here。从文档中可以看出,对于此实现,“d”是没有前导零的日期,而“dd”包含前导零。 “M”和“MM”都代表带有前导零的月份。 “yy”是2位数年份。
这与jQuery UI的日期格式符号之间存在足够的差异,您需要使用数据映射将IntlDateFormatter
格式符号映射到jQuery UI datepicker format symbols,反之亦然。
这样的事情应该足够(未经测试):
// PHP => jQuery
$formatMap = array(
'dd' => 'dd',
'd' => 'd',
'MM' => 'mm',
'M' => 'mm',
'yy' => 'y'
// and so on...
);
设置完地图后,您可以根据区域设置创建IntlDateFormatter
,将该格式的符号转换为jQuery UI日期格式符号,然后将格式发送到前端。
当用户回发所选日期时,您可以反向执行相同操作以返回IntlDateFormatter
符号。此时,您可以使用IntlDateFormatter::setPattern()
的组合将格式设置为MySQL样式,并使用datefmt_format()
(或等效的)来实际设置发布日期的格式。
希望这有帮助。