我正在使用Laravel 4并尝试计算服务器上的时间和数据库中的时间节省的差异,以小时为单位。这是代码:
服务器上的时间= timeNowOnServer // 2016-02-03 19:05:43 保存在Database = setTime // 18:00:00
中的时间 $timeNowOnServer = null;
$setTime = null;
$timeZone = $company->time_zone;
$company->save();
// My Time
$hour = substr($company->emp_auto_logout_time, 0, 2);
$setTime = Carbon::createFromTime($hour);
// Server Time Same as Mine
$timeNowOnServer = Carbon::now();
$timeNowOnServerSameAsMine = $timeNowOnServer->setTimezone($timeZone);
// Time Differnce Between SetTime and TimeOnServerSameAsMine
$timeDiff = $setTime->diffInHours($timeNowOnServerSameAsMine, $abs = false);
如果Server Time
为14:00:00,Set Time
为19:00:00。我的时区是GMT +5 Pakistan
。
我正在做的是,在上面给出的代码的第3行最后一行中给出Server Time
,根据用户时间添加设置time zone
。
当我使用diffInHour
而不是给我0时,它会给我-5或5.这意味着它正在使用UTC (Server Time)
,这就是为什么在几小时内给出错误的差异。
有人可以让我知道我哪里错了吗?
答案 0 :(得分:2)
你试图在不同的时区区分时间。时间差(间隔)是绝对值,它不依赖于时区。一秒钟总是一秒钟,无论是UTC
还是Europe/Moscow
。
尝试不带时区(为了正确 - 使用默认服务器'时区)
$timeDiff = $setTime->diffInHours($timeNowOnServer, $abs = false);
对于两个DT值,始终使用时间戳或相同的时区(并不确切地考虑哪一个)计算间隔。