当地时间和服务器时间的碳时间差

时间:2016-02-03 14:33:41

标签: php datetime laravel-4 laravel-5 php-carbon

我正在使用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),这就是为什么在几小时内给出错误的差异。

有人可以让我知道我哪里错了吗?

1 个答案:

答案 0 :(得分:2)

你试图在不同的时区区分时间。时间差(间隔)是绝对值,它不依赖于时区。一秒钟总是一秒钟,无论是UTC还是Europe/Moscow

尝试不带时区(为了正确 - 使用默认服务器'时区)

$timeDiff = $setTime->diffInHours($timeNowOnServer, $abs = false);

对于两个DT值,始终使用时间戳或相同的时区(并不确切地考虑哪一个)计算间隔。