我想将日期时间从数据库转换为时间戳,但无法正常工作。我将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;
}
答案 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})$@
,以确保位数正确。