碳日期时间不同

时间:2017-01-05 23:40:56

标签: php laravel session laravel-5.3 php-carbon

案例

使用MiddlewareSession& Carbon检查session/shopping cart是否已创建longer than 20 minutes ago,以便刷新会话。 (路由在中间件内分组)

  

当前数据正在Homestead上运行,但在我的实时网站上出现同样的问题,该网站正在数字海洋服务器上运行

class CheckCart
{
    public function handle($request, Closure $next)
    {
        // Defining current timestamp
        $now = Carbon::now();

        // created_at from the session
        $created_at = $request->session()->get('created_at');

        // If the cart count is == 1, & created_at is null -> put created at date in session
        if (Cart::count() == 1 && $created_at == null) {
            $request->session()->put('created_at', $now);
        }

        // If created at date + 20 minutes is earlier than current time, flush (empty) session
        if ($created_at != null) {
            if ($created_at->addMinutes(20) < $now) {
                $request->session()->flush();
            }
        }
        return $next($request);
    }
}

问题

    我的Macbook中的
  • Local time2017-01-06 00:00
  • Carbon::now()2017-01-05 23:25
  • created_at时间戳(最终由Carbon::now()设置)为2017-01-06 03:20

这些时间戳如何差异如此之大,尤其是created_at在某个时刻由Carbon::now()定义的时间至少可以达到7小时?

  • 所有时区均为Europe/Amsterdam

image with code & timestamps

1 个答案:

答案 0 :(得分:1)

问题在于$created_at->addMinutes(20)。每次执行代码时(使用刷新,请求或其他内容),它会为会话值增加20分钟。然后还有关于Homestead的时间与实际机器不同的评论中提到的问题。

要解决created_at问题,您应该通过执行$created_at->copy()->addMinutes(20)复制它。将此技巧与所有其他代码一起应用,其中实际需要副本而不是对象本身。希望有所帮助!