合并日期和时间

25
$combinedDT = date('Y-m-d H:i:s', strtotime('$date $time'));

日期格式 2013-10-14

时间格式 23:40:19

当我尝试存储到日期时间数据类型时,出现了零值。

2个回答

54

你目前正在使用strtotime('$date $time')。被单引号包裹的变量不会被解析。如果你使用单引号,PHP会将其视为字面字符串,strototime()会尝试将字符串$date $time转换为时间戳。

这样做会失败,这就解释了为什么你得到了错误的结果。

你需要使用双引号:

$combinedDT = date('Y-m-d H:i:s', strtotime("$date $time"));
                                            ^           ^

27

对于那些使用 DateTime 对象的人:

$date = new DateTime('2017-03-14');
$time = new DateTime('13:37:42');

// Solution 1, merge objects to new object:
$merge = new DateTime($date->format('Y-m-d') .' ' .$time->format('H:i:s'));
echo $merge->format('Y-m-d H:i:s'); // Outputs '2017-03-14 13:37:42'

// Solution 2, update date object with time object:
$date->setTime($time->format('H'), $time->format('i'), $time->format('s'));
echo $date->format('Y-m-d H:i:s'); // Outputs '2017-03-14 13:37:42'

1
解决方案2是唯一正确的。第一个解决方案可能会引起很多问题 ;) - Jarek Kowol
@JarekKowol,您能解释一下吗?您指的是哪些问题? - Wilbo Baggins
1
第二种解决方案保留了时区信息。 - bmatovu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接