首页 > 解决方案 > PHP将多个数组值转换为时间格式

问题描述

对于一个项目,我需要将多个值从一个数组转换为 PHP 中的时间格式。我有这样的数组:
starttime = ['year' => 2019, 'month' => 5, 'day' => 10, 'hour' => 20, 'minute' => 15]
有没有办法将这些值转换为时间格式,我也可以用它来计算东西?我已经尝试过使用 strtotime,但它不起作用。
感谢您的回答!

标签: phparraystimetime-format

解决方案


我建议使用DateTime具有setDate,setTimegetTimestamp方法的对象。您可以使用它从数组键中定义日期和时间,并检索 unix 时间戳作为结果。

示例:https ://3v4l.org/o3lVr

$starttime = ['year' => 2019, 'month' => 5, 'day' => 10, 'hour' => 20, 'minute' => 15];
$date = new \DateTime();
$date->setDate($starttime['year'], $starttime['month'], $starttime['day']);
$date->setTime($starttime['hour'], $starttime['minute']);

var_dump($timestamp = $date->getTimestamp());
var_dump(date('Y-m-d H:i:s', $timestamp));

结果:

int(1557512100)
string(19) "2019-05-10 20:15:00"

可选地,为了防止缺少键的问题,在 PHP >= 7.0 中,您可以使用空合并运算符??将值默认为当前日期。

示例:https ://3v4l.org/0MOI5

$starttime = ['month' => 5, 'day' => 10, 'minute' => 15];

$date = new \DateTime();
$date->setDate($starttime['year'] ?? $date->format('Y'), $starttime['month'] ?? $date->format('m'), $starttime['day'] ?? $date->format('d'));
$date->setTime($starttime['hour'] ?? $date->format('H'), $starttime['minute'] ?? $date->format('i'));

var_dump($timestamp = $date->getTimestamp());
var_dump(date('Y-m-d H:i:s', $timestamp)); 

结果:

int(1557497700)
string(19) "2019-05-10 16:15:00"

或者,您也可以使用mktime来产生相同的结果。请注意,根据手册,在 PHP < 5.1.0 中,如果DST未指定,此方法可能会产生意外(但并非不正确)的结果。

示例:https ://3v4l.org/DU0Q1

$starttime = ['year' => 2019, 'month' => 5, 'day' => 10, 'hour' => 20, 'minute' => 15];

$timestamp = mktime(
    $starttime['hour'], 
    $starttime['minute'], 
    0, 
    $starttime['month'], 
    $starttime['day'], 
    $starttime['year']
);

var_dump($timestamp);
var_dump(date('Y-m-d H:i:s', $timestamp)); 

结果:

int(1557512100)
string(19) "2019-05-10 20:15:00"

推荐阅读