2017-03-28 72 views
0

我試圖建立用戶出行的數據庫,其中包括存儲: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", 
    } 
+0

不是一個直接的答案,但laravel使用碳庫,所以也許看看那些文檔HTTP用戶:// carbon.nesbot.com/docs/ – Christophvh

回答

1

最簡單方法是存儲日期和時間,UNIX時間戳(它的時區無關)。然後,你可以將其轉換爲任何時區(取決於用戶位置或機場時區)

0

非常簡單遵循它:

  • 儲存在UTC所有時間戳(默認laravel配置)。
  • 用戶可以選擇他們的時區並將其保存在用戶表中。
  • 然後,您可以使用碳來將日期轉換爲當地時間。 (已經在Laravel中的Carbon 庫)。

例如,對於誰住在不同的國家像Europe/LondonAsia/Kolkata

$something->created_at->timezone($user->timezone);