这是我的代码。我添加了一个日期对象和一个时间对象。但答案是返回不正确的价值。我怎么能这样做?
$time_obj = mktime(23, 20, 10);
$date_obj = mktime(0, 0, 0, 07, 09, 2013);
$new_date = $time_obj+$date_obj;
$date_str = date('Y-m-d H:i:s', $new_date);
echo($date_str);
$ date_str是一个不正确的值。我怎么能克服这个?
答案 0 :(得分:3)
添加日期问题的一个很好的解决方案是使用精彩的DateTime
类:
$date = new DateTime('2013-07-09');
$time = new DateInterval('P23H20M10S');
$date->add($time);
echo $date->format('Y-m-d H:i:s');
这具有将句点(例如时间,在这种情况下)的概念与绝对日期分开的效果。你所做的实际上是将两个绝对日期加在一起,结果不可避免地令人困惑。
答案 1 :(得分:1)
mktime()函数返回整数,表示自1970年以来的秒数。因此,如果你添加这两个数字,你会得到一些奇怪的东西。由于时间戳存储为整数,因此加法会受到整数溢出的影响,因此对于32位整数,您可能会获得过去的日期。
mktime(23, 20, 10) + mktime(0, 0, 0, 07, 09, 2013)
1373404810 + 1372543200 = 2'745'948'010 seconds since 1970
顺便说一下,发现这个:从PHP 5.1.0开始,这个参数已被弃用。因此,应该使用新的时区处理功能。
答案 2 :(得分:0)
因为mktime
总是返回一个时间戳,这是“epoch”(1970-01-01,00:00:00 UTC)的秒数。
mktime(23, 20, 10);
不在“23小时20分10秒内”返回秒数。它返回纪元与今天的日期,23:20:10之间的秒数。
您可以按如下方式解决此问题:
...
$time_obj = 23*3600 + 20*60 + 10;
...
答案 3 :(得分:0)
没有办法让时间戳“仅限时间”。它将始终包含日期和时间。
时间戳始终是自1970年1月1日以来的秒数。
因此,mktime()
将始终返回完整时间戳。
mktime(23, 20, 10);
将自动替换为当前日期,因此内部将如下所示:
mktime(23, 20, 10, 6, 7, 2013);