我正在努力创造一些聪明的东西,以便以任何国际格式解析日期.
在我的前端,我使用jquery ui作为日期选择器,每种语言都有其特定的日期格式.
Fr:d / m / Y.
恩:m / d / Y.
…
好的但是现在在php部分我必须使用相同的格式存储这些日期(Mysql Y-m-d).我想避免使用开关盒和类似的东西,所以我开始寻找另一种选择.
我发现的最好的事情是
例如
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
好的,这是一个好的开始,但现在我想找到当前语言环境的标准日期格式.
所以我发现了这个:
但我真的不知道如何让它工作,因为我得到了无穷无尽的结果:
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 */
我错过了什么吗?
谢谢
解决方法:
没有“通用日期格式符号标准”.符号“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()(或等效的)来实际格式化发布日期.
希望这可以帮助.
标签:php,date
来源: https://codeday.me/bug/20190709/1418293.html