gpt4 book ai didi

php - 如何解析任何日期格式

转载 作者:可可西里 更新时间:2023-10-31 23:43:29 25 4
gpt4 key购买 nike

我正在尝试做一些聪明的事情来解析任何国际格式的日期。

在我的前端,我使用 jquery ui 作为日期选择器,每种语言都有其特定的日期格式。

神父:日/米/年恩: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 */

我错过了什么吗?

谢谢

最佳答案

没有“通用的日期格式符号标准”。符号“y”可能是 2 位数年份、4 位数年份,甚至是 3 字母缩写月份(极不可能),具体取决于来源。

IntlDateFormatter 的格式化符号已记录在案 here .从文档中可以看出,对于此实现,“d”是没有前导零的日期,而“dd”包含前导零。 “M”和“MM”都代表带有前导零的月份。 “yy”是两位数的年份。

这个和 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...
);

设置 map 后,您可以根据区域设置创建 IntlDateFormatter,将该格式的符号转换为 jQuery UI 日期格式符号,然后将格式发送到前端。

当用户回发所选日期时,您可以反向执行相同的操作以返回到 IntlDateFormatter 符号。此时,您可以结合使用 IntlDateFormatter::setPattern() 将格式设置为 MySQL 样式,并使用 datefmt_format()(或等效的)实际格式化发布日期。

希望这对您有所帮助。

关于php - 如何解析任何日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com