【发布时间】:2013-06-11 16:11:58
【问题描述】:
此脚本返回不一致的天数。 在 localhost 返回 14 天,在客户端服务器返回 15 天。
$_POST['pickup_time'] = '13:30';
$_POST['dropoff_time'] = '12:00';
$_POST['pickup_date'] = '2013-10-16';
$_POST['dropoff_date'] = '2013-10-30';
$fmt_pickup_date = strtotime($_POST['pickup_date']);
$fmt_dropoff_date = strtotime($_POST['dropoff_date']);
$days = ceil(abs($fmt_dropoff_date - $fmt_pickup_date) / 86400);
if ($vehicles[$v]['vehicle_cal_date']==0)
{
$fmt_pickup_time = str_replace(":", "", $_POST['pickup_time']);
$fmt_dropoff_time = str_replace(":", "", $_POST['dropoff_time']);
if (($fmt_dropoff_time-$fmt_pickup_time)>=1)
{
$days++;
}
}
else { $days++; }
对于某些日期返回正确的天数,而对于某些错误(+1 天)。
[pickup_time] => 11:00
[dropoff_time] => 10:00
[pickup_date] => 2013-10-28
[dropoff_date] => 2013-11-01
这些日期在两台服务器上返回 4 天,这是正确的。
有什么想法吗?怎么了?
编辑:
好像是这样的:
date_default_timezone_set('UTC');
修复了问题,现在脚本返回了两个日期的正确天数。多久——不知道。我希望这将在所有日期修复它:)
【问题讨论】:
-
您使用的服务器是在哪个时区配置的?也许他们有不同的日期。
-
你真的不应该在字符串上做“数学”。
13:30-12:00可能有效,但即使使用:=> 您正在做的空字符串替换,它仍然非常麻烦。为什么不使用提供的 php DateTime 类来做所有这些“数学”? -
'vehicle_cal_date' 变量有什么不同吗?因为这可能会导致天++?
-
请仔细阅读我的建议,在编写自己的代码之前尝试始终使用 php 内置函数
标签: php date datetime timezone days