【问题标题】:Convert date string into date format [duplicate]将日期字符串转换为日期格式[重复]
【发布时间】:2012-12-31 02:59:53
【问题描述】:

可能重复:
PHP function to get the date format?

例如:

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

得到我:

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

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

Y-m-d H:i:s

给定任何日期字符串,我如何获得 date_parse / strtotime 所理解的格式字符串?

【问题讨论】:

  • 所以你的意思是要报告PHP正在解释的格式字符串?
  • 是的........还有 12 个 omg
  • 我认为没有任何功能可以为您提供此类信息;用例是什么?
  • 从技术上讲,Y-m-d H:i:s 不会像 s 代表 00 而不仅仅是 0,与小时、月份相同,也取决于其他字符串。 date_parse() 的返回值不会添加前导零。
  • 您希望“2012-10-10 10:10:10”的格式是什么?对于日期部分,这可能是 Y-m-dY-d-m,它可能是“总是 2 位数”几个小时……从根本上说它是模棱两可的。如果允许 2 位数年份,情况会更糟。

标签: php date datetime time


【解决方案1】:

这样使用:

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

猜测日期格式:

我在 StackOverflow 中看到了 answer

不,没有猜测日期格式的功能。您需要编写一组正则表达式匹配来表达所有可能的变化,例如

$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 查看我的更新答案。 :)
  • 这似乎适用于这种特殊情况,但该正则表达式真的涵盖了 PHP 日期函数支持的所有日期/时间格式吗?
  • @Alex,您需要为每个可能的组合创建一个正则表达式。你到底在用这个做什么?我们也许能够找到一个更具体的替代方案来实现您正在尝试做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多