将日期字符串转换为日期格式

4

可能是重复问题:
PHP函数获取日期格式?

例如:

$date = date_parse('2010-09-17 14:00:00');

gets me:

year    =>  2010
month   =>  9
day     =>  17
hour    =>  14
minute  =>  0
second  =>  0

根据PHP解释字符串的方式,以下是对应的格式:

Y-m-d H:i:s

针对任何日期字符串,如何获取被date_parse/strtotime理解的格式字符串?


你的意思是你想报告 PHP 正在解释的格式字符串吗? - Michael Berkowski
是的...........还有12个,天啊 - Alex
我认为没有任何函数可以给你这样的信息;你的使用场景是什么? - Ja͢ck
从技术上讲,Y-m-d H:i:s 并不是正确的格式,因为 s 表示的是 00 而不仅仅是 0,小时、月份以及其他字符串也是如此。date_parse() 的返回值不会添加前导零。 - cryptic ツ
1
你会期望“2012-10-10 10:10:10”的格式是什么?日期部分可以是Y-m-dY-d-m,小时部分可以是“始终为2位数”或不是...从根本上讲,这是有歧义的。如果允许使用两位数年份,情况会变得更糟。 - Jon Skeet
1个回答

4

使用方法:

date("Y-m-d H:i:s", strtotime('2010-09-17 14:00:00'));

猜测日期格式:

我在 StackOverflow 的一个 答案 中看到:

没有这样的函数可以猜测日期格式。您需要编写一组正则表达式匹配,以表达所有可能的变体,例如:

$variations = array (
    '^([0-9]{4})/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{4}2$' => 'Y/m/d H:i:s',
    // more here
);

foreach ($dateFromDatabase as $date) {
    foreach ($variations as $regexp => $dateFormat) {
        if (preg_match ('|' . $regexp . '|', $date)) {
            $matches[$dateFromDatabase] = $dateFormat;
            break;
        }
    }
}

// $matches now consists of an array of dates => format

我不想获取日期,我想获取格式 :) - Alex
哦...你想从给定的方式中检测格式,是吗? - Praveen Kumar Purushothaman
这似乎适用于这个特定的情况,但是那个正则表达式真的覆盖了PHP日期函数支持的所有日期/时间格式吗? - Alex
@Alex,你需要为每种可能的组合制作一个正则表达式。你具体是用来做什么的?我们可能能够找到更具体的替代方案来实现你想要做的事情。 - cryptic ツ
好的,这是为了调试目的,所以如果没有任何 PHP 函数可以提供此信息,那么它并不是非常重要。 - Alex
我们不知道 PHP 的 strtotime 如何解析日期。 ;) - Praveen Kumar Purushothaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接