Laravel多个时区

时间:2017-03-28 11:01:40

标签: php mysql laravel

我正在尝试构建一个用户旅行数据库,其中包括存储:

  • FLIGHTNUMBER
  • DepartureAirport
  • DepartureTime
  • ArrivalAirport
  • ArrivalTime

请注意,两个机场都可以位于不同的时区。我需要计算出这个航班的时差和天数等。

我不知道如何解决这个问题。我应该添加更多列来存储本地日期时间和UTC时间吗?

另外,我已经看到Laravel有dateTimeTz()列类型。然而,它似乎并没有存储任何有关时区的信息?

帖子表:

$table->dateTimeTz('newTime')->nullable();

设定新时间:

$p->newTime = \Carbon\Carbon::now('Asia/Kolkata')
=> Carbon\Carbon {#841
     +"date": "2017-03-28 16:23:33.490926",
     +"timezone_type": 3,
     +"timezone": "Asia/Kolkata",
   }

>>> $p
=> App\Post {#836
     id: 1,
     user_id: 1,
     title: "Et quaerat deserunt qui ullam voluptas.",
     body: "Aut eos id ut qui laborum. Tempore rerum ut quas deserunt voluptas optio.",
     slug: "et-quaerat-deserunt-qui-ullam-voluptas",
     newTime: "2017-03-28 16:23:33",
     created_at: "2017-03-28 10:51:36",
     updated_at: "2017-03-28 10:51:36",
   }

2 个答案:

答案 0 :(得分:3)

非常简单:

  • 以UTC格式存储所有时间戳(默认为laravel配置)。
  • 用户可以选择他们的时区并将其保存在用户表中。
  • 然后您可以使用碳将日期转换为当地时间。 (碳 图书馆,已经在Laravel里面了。)

例如,适用于居住在Europe/LondonAsia/Kolkata

等其他国家/地区的用户
$something->created_at->timezone($user->timezone);

答案 1 :(得分:2)

最简单的方法是在UNIX时间戳中存储日期和时间(它与时区无关)。然后您可以将其转换为任何时区(取决于用户位置或机场时区)