将时间格式重新格式化为非军事时间

时间:2017-11-23 09:21:03

标签: php string datetime

我有以下字符串......

“20:30 pm - 23:30 pm”

我正在尝试使用strtotime更改时间格式,但由于没有日期,因此返回FALSE。

$oldtime = "20:30pm - 23:30pm";
$newtime = explode(" - ", $oldtime);
foreach($newtime as $k => $t) {
  $time[$k] = strtotime($t);
}

但是我的$ time数组出来了......

array(
  0 => FALSE,
  1 => FALSE
)

是否有将此更改为日期/时间对象并重新格式化而没有日/月/年?

理想的结果是“晚上8:30 - 晚上11:30”

5 个答案:

答案 0 :(得分:2)

您可以使用DateTime::createFromFormat()

print_r(DateTime::createFromFormat("H:i+", "20:30pm"));

+docs)用于忽略尾随数据,在本例中为pm个字符。

答案 1 :(得分:0)

您可以执行以下操作:

$oldtime = "20:30pm - 23:30pm";
$newtime = explode(" - ", $oldtime);
foreach($newtime as $k => $t) {
$time[$k] = DateTime::createFromFormat('H:iA', $t);
echo $time[$k]->format('H:i:s');  //or any other format you want
}

您可以获得更多信息:http://php.net/manual/en/datetime.createfromformat.php

答案 2 :(得分:0)

如果$oldtime = "20:30 - 23:30";

然后你可以试试这个

$oldtime = "20:30 - 23:30";
$newtime = explode(" - ", $oldtime);
foreach($newtime as $k => $t) {
  $time[$k] = date("g:i a", strtotime($t));
}

print_r($time);

答案 3 :(得分:0)

使用类似下面的内容。然而,datetime convertion将显示执行日

public function test2(){
    $oldtime = str_replace("pm","","20:30pm - 23:30pm");
    $newtime = explode(" - ", $oldtime);

    foreach($newtime as $k => $t) {
        $time[$k] = strtotime($t);
    }
    print_r($time);
    echo $time = date("m/d/Y h:i:s A T",$time[0]);

}

答案 4 :(得分:0)

更新了答案

这个答案来自@KrisRoofe,他建议根据字符串值及其时间格式实例化DateTime对象。他还建议如何通过在时间格式字符串中包含“+”来消除使用str_replace()的需要 - 很好!所以,这是这个答案的基础,但它也有一些值得注意的差异,如下:

<?php

$oldtime = "20:30pm - 23:30pm";
$newtime = explode("-", $oldtime );

$arrStr = [];
$arrObj = [];

foreach($newtime as $elem) {

  $o = DateTime::CreateFromformat( 'H:i+',trim($elem) );
  $arrObj[] = $o;
  $arrStr[] = $o->format('g:iA');
}

echo join(" - ",$arrStr);

请参阅live code

在包含军事格式的时间的字符串爆炸时,生成的数组存储在$ newtime中。 foreach使用每个元素的值迭代数组。

循环中发生静态调用,使用DateTime类的CreateFromformat方法生成一个存储在$ o中的DateTime对象。然后将对象$ o分配给数组。因此,代码具有一个DateTime对象数组,其中包含原始字符串值。

接下来在foreach中,$ o使用其format()方法重新格式化其date属性的值,以便新的字符串结果包含12小时格式的时间。该结果存储在一个数组字符串中,这些字符串最终会根据OP的请求产生理想的结果。