【问题标题】:What's the right format to create a PHP DateTime instance of '2016.04.30 PM 7:30' via DateTime::createFromFormat?通过 DateTime::createFromFormat 创建“2016.04.30 PM 7:30”的 PHP DateTime 实例的正确格式是什么?
【发布时间】:2016-04-22 03:59:43
【问题描述】:

我目前正在处理一个 Wordpress 项目,我应该在该项目中获取一些自定义帖子元数据,将其转换为 DateTime 实例,然后对其进行数学运算。

当我echoget_post_meta 时,它看起来如下。

2016.04.30 下午 7:30

我用来获取DateTime 实例的格式如下。

Y.m.d A g:i

但是DateTime::createFromFormat的返回值是false

// 2016.04.30 PM 7:30
$start_at = DateTime::createFromFormat( 'Y.m.d A g:i', get_post_meta(get_the_ID(), 'as_date', true));
if ($start_at === false) {
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
    echo $start_at->getTimestamp();
}

结果是False format: 2016.04.30 PM 7:30

我在这里缺少什么?我想这一定是一件微不足道的事情,但我无法通过。

【问题讨论】:

    标签: php wordpress datetime date-formatting


    【解决方案1】:

    测试,我发现格式中的问题字符是'A'。所以我四处寻找,发现了这个bug in PHP(这显然不是一个错误!)

    通过source code,它看起来直到一个小时后才解析AM和PM。

    您最好的选择可能是快速通过正则表达式将 AM/PM 移动到末尾:

    $thedate = get_post_meta(get_the_ID(), 'as_date', true);
    $thedate = preg_replace("/([0-9.]+) ([ap]m) ([0-9:]+)/i", "$1 $3 $2", $thedate);
    $start_at = DateTime::createFromFormat('Y.m.d g:i A', $thedate);
    

    【讨论】:

      【解决方案2】:

      更改日期格式并尝试createFromFormat

      $non_standard_format  = '2016.04.30 PM 7:30';
      $non_standard_format = str_replace('.','-',$non_standard_format);
      $date_components = explode(" ",$non_standard_format);
      $standard_format = $date_components[0]." ".$date_components[2]." ".$date_components[1];
      

      然后尝试将其传递给DateTime::createFromFormat

      $start_at = DateTime::createFromFormat( 'Y-m-d g:i A', $standard_format);
      if ($start_at === false) {
          echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
      } else {
          echo $start_at->getTimestamp();
      }
      

      Supported date formats in PHP

      【讨论】:

      • 不要忘记在您的示例中将格式字符串从 'Y.m.d A g:i' 更改为 'Y-m-d g:i A'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2012-04-24
      • 1970-01-01
      相关资源
      最近更新 更多