使用爆炸方法从数据库中提取日期时间

时间:2019-04-14 19:53:37

标签: php

我想将日期时间从数据库转换为时间戳,但无法正常工作。我将split()函数(不建议使用)更改为explode(),但仍然出现错误:“未定义的偏移量:3”。

我在做什么错了?

function createTimestamp($time) {

    list($day, $month, $year, $hour, $minute) = explode(':', $time);  // error is here
    return mktime($hour, $minute, -1, $month, $day, $year) + 1492640000000;
}

1 个答案:

答案 0 :(得分:1)

仅当时间字符串 使用冒号作为分隔符时,才能使用explode()。对于诸如2019-04-15 23:09:46之类的日期时间字符串,您需要更聪明。您可以使用正则表达式来分隔字段:

<?php

$time = '2019-04-15 23:09:46';

if (preg_match ('@^(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)$@', $time, $m)) {
    list($datettime, $year, $month, $day, $hour, $minute, $second) = $m;
    echo mktime($hour, $minute, -1, $month, $day, $year) + 1492640000000;
} else {
    // Error: malformed string
}

?>

上面的正则表达式期望每个字段至少有一位数字。如果您想准确地验证字符串,则可以使用更具体的正则表达式,例如@^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d {2}):(\d{2})$@,以确保位数正确。

您可以在PHP Manual: preg_match()

中阅读更多内容