用AM / PM将PHP字符串转换为DateTime [英] PHP String to DateTime with AM/PM

查看:73
本文介绍了用AM / PM将PHP字符串转换为DateTime的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以将这种格式为 AH:im / d / y的字符串转换为php中的DateTime?

It is posible to convert my string with this format "A H:i m/d/y" to a DateTime in php?

示例字符串:AM 05:28 13/07/08

Example string: AM 05:28 07/08/13

这不起作用

$date = DateTime::createFromFormat('A H:i m/d/y', 'AM 05:28 07/08/13');

这有效:

$date = DateTime::createFromFormat('H:i m/d/y', '05:28 07/08/13');

$date = DateTime::createFromFormat('H:i m/d/y A', '05:28 07/08/13 AM');

丑陋的解决方法:

$myDate = 'AM 05:28 07/08/13';
$myDate = substr($myDate, 3, strlen($myDate)-3)." ".substr($myDate, 0, 2);

$date = DateTime::createFromFormat('H:i m/d/y A', $myDate);


推荐答案

这是php bug 。尝试使用下一个函数:

This is a php bug. Try to use next function:

function createFromFormat($format, $time)
{       
    $is_pm  = (stripos($time, 'PM') !== false);
    $time   = str_replace(array('AM', 'PM'), '', $time);
    $format = str_replace('A', '', $format);

    $date   = DateTime::createFromFormat(trim($format), trim($time));

    if ($is_pm)
    {
        $date->modify('+12 hours');
    }

    return $date;
}


$date = createFromFormat('H:i m/d/y A', '05:28 07/08/13 AM');
var_dump($date->format('d.m.Y H:i')); //  string(16) "08.07.2013 05:28" 

$date = createFromFormat('H:i m/d/y A', '05:28 07/08/13 PM');
var_dump($date->format('d.m.Y H:i')); //  string(16) "08.07.2013 17:28" 

这篇关于用AM / PM将PHP字符串转换为DateTime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆