我建议使用具有setDate、setTime 和getTimestamp 方法的DateTime 对象。您可以使用它从数组键中定义日期和时间,并检索 unix 时间戳作为结果。
$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 中,您可以使用 null coalesce operator ?? 将值默认为当前日期。
示例: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 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"