本地时间与服务器时间的碳时差

Carbon Time Difference of Local Time and Server Time

我正在使用 Laravel 4 并尝试计算服务器上的时间和数据库中的时间节省(以小时为单位)的差异。这是代码:

服务器时间=timeNowOnServer // 2016-02-03 19:05:43 保存在数据库中的时间 = 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.

我正在做的是,根据用户时间添加设置 Server Time,方法是在上面给定代码的最后 3 行中给出 time zone

当我使用 diffInHour 时,它不是给我 0,而是给我 -5 或 5。这意味着它正在使用 UTC (Server Time),这就是为什么给出错误的小时差。

谁能告诉我哪里错了?

您正在尝试区分不同时区的时间。时差(间隔)是一个绝对值,与时区无关。一秒总是一秒,无论是 UTC 还是 Europe/Moscow.

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

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

对于两个 DT 值,始终使用时间戳或相同的时区(无关紧要是哪个时区)来计算间隔。