2011-10-30 34 views
0

我想記錄在電影院播放的電影的開始和結束時間。我需要存儲日期(例如2011年1月1日),開始時間(例如上午9:00)和結束時間(例如上午11點)。我應該使用DateTime嗎?我已經看到一些實現,其中INT用於以分鐘表示時間(例如0 = 12午夜,1 = 12:01上午等)。我不確定在DateTime上使用INT是否有某種好處。要使用哪種MySQL數據類型進行調度?

建議?

編輯1:

擴展在上述使用INT的想法,該表將可能有以下欄目:

  • 日期(例如2011年1月1日)
  • start_time(例如540-表示上午9點)
  • end_time(例如660-表示上午11點)

回答

0

使用DATETIMEINT

我寧願存儲日期&時間在Unix時間戳(INT),因爲我可以在PHP函數使用它像date

echo "Movie will start at ".date("H:i", $row['start_time']); 

而且很容易用它來操作:

echo "Movie will start in ".(time() - $row['start_time'])." seconds"; 

當前日期和時間:http://www.unixtimestamp.com/

如果你想電影複製到第二天:

$sql = "SELECT * FROM movies WHERE start_time >= ".strtotime("today 00:00")." AND start_time <= ".strtotime("today 23:59"); 

// query.. 
foreach($results as $row) { 
    $new_start = strtotime("+1 day", $row['start_time'];  
    // insert 
} 
+0

彼得,如果我有幾部電影在一天中的不同時間上映 - 然後我想複製第二天的這些時間表?會不會有一個數據類型會更好?我的方法不會使用INT更簡單嗎? – StackOverflowNewbie

+0

看看我編輯的答案。 – Peter

+0

使用DateTime沒有固有的好處? – StackOverflowNewbie

5

我認爲一個人應該使用更好的配合和描述了現實中的數據類型。在這種情況下,我想使用Datetime

0

我會爲兩列使用'timestamp'。

日期時間使用4個字節,而時間戳使用8個字節因此更有效。

時間戳的比較顯着快於日期時間。

說到時區閏年和夏令時,您可能會遇到int技術問題,因爲您必須手動將這些更改考慮在內。也許這對你來說不是問題。

+0

亨特 - 如何8字節比4字節快?似乎我應該選擇最便宜的數據類型來滿足我的目的。否? – StackOverflowNewbie

+0

INT(4)長度爲4個字節,可以是unix時間戳。 – Peter

0

我說你有兩個相應的格式:

  • 「開始時間 - 時間」(日期時間,INT)或(時間戳,INT)
  • 「開始時間 - 結束時間」(日期時間,日期時間)或(時間戳,時間戳)

日期時間的一個重大問題是DST每年跳兩次,計算時間會縮短一個小時。時區之間的旅行同樣令人困惑。如果您使用時間/時間符號,您的持續時間可能會有所不同。如果您使用時間/持續時間表示法,則結束時間可能會有所不同。這兩種表示中哪一種最合適取決於您的使用情況(您可能需要使用混合方法)。

對於電影放映時間,我認爲以分鐘爲單位存儲開始時間和持續時間是更合適的格式。電影的運行時間是給定的,結束時間在事實之後。

2

對我來說更好的是使用DateTime列,因爲INT有隱藏的解釋。沒有文檔,你不知道它真的是什麼:秒,分,月,... 這只是設計方法。

當使用DATETIME的開始和結束領域考慮,你可能會遇到麻煩時「calculationg漫長的過程怎麼走」,因爲你也應該考慮一下時區,夏令等