【问题标题】:Carbon Time Difference of Local Time and Server Time本地时间与服务器时间的碳时差
【发布时间】:2016-05-12 19:34:28
【问题描述】:

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

谁能告诉我哪里错了?

【问题讨论】:

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


    【解决方案1】:

    您正在尝试区分不同时区的时间。时间差(间隔)是一个绝对值,它不依赖于时区。一秒就是一秒,UTCEurope/Moscow

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

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

    对于两个 DT 值,始终使用时间戳或相同的时区(并不重要)来计算间隔。

    【讨论】:

    • 如何从碳对象中获取时间戳?
    • @MKJ $carbonObject->timestamp。我的例子有帮助吗?
    • 是的,它确实帮助了我。谢谢。实际上我必须获取服务器的现在时间,并从数据库中设置时间,然后根据用户本地时间的时区转换服务器时间,我只需要几个小时。然后比较 Server Hours > Set Hour (Db saved time hour) 如果为真则执行操作。这是正确的方法吗?
    • 我不确定我是否理解您的任务。如果是关于按时开始某事(一种时间表),那么您必须在必须执行操作的时区中格式化日期和时间。然后比较 dt representation,而不是绝对差异。
    猜你喜欢
    • 2014-04-11
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多