我想记录在电影院播放的电影的开始和结束时间。我需要存储日期(例如2011年1月1日),开始时间(例如上午9:00)和结束时间(例如上午11点)。我应该使用DateTime吗?我已经看到一些实现,其中INT用于表示以分钟为单位的时间(例如,0 = 12午夜,1 = 12:01 am等)。我不确定使用INT over DateTime是否有某种好处。
建议?
编辑1:
如上所述扩展使用INT的想法,该表可能包含以下列:
答案 0 :(得分:5)
在我看来,一个人应该使用更适合和描述现实的数据类型。在这种情况下,我想使用Datetime
。
答案 1 :(得分:2)
对我来说更好的是使用DateTime列,因为INT有隐藏的解释。没有文档,你不知道它到底是什么:秒,分钟,月...... 这只是设计方法。
当使用DATETIME作为开始和结束字段时,考虑到“计算过程需要多长时间”时可能会遇到问题,因为您还应该考虑时区,夏令时等。
答案 2 :(得分:0)
我更喜欢在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
}
答案 3 :(得分:0)
我会为两列使用'timestamp'。
Datetime使用4个字节,而Timestamp使用8个字节,因此效率更高。
时间戳的比较明显快于日期时间。
对于时区闰年和夏令时,您可能会遇到使用int技术的问题,因为您必须手动考虑这些更改。也许这对你来说不是问题。
答案 4 :(得分:0)
我说你有两种合适的格式:
日期时间的一个大问题是DST每年跳两次,将计算量减少一个小时。在时区之间旅行同样令人困惑。如果您使用时间/时间表示法,您的持续时间可能会有所不同。如果您使用时间/持续时间表示法,您的结束时间可能会有所不同。因此,最适合这两种表示中的哪一种取决于您的使用(您可能需要使用混合方法)。
对于电影放映时间,我会说以几分钟为单位存储开始时间和持续时间是更合适的格式。电影的运行时间是给定的,结束时间是在事实之后。