2010-12-21 90 views
18

我需要计算用户在网站上花费的时间。给我一些类似“Mr X在线4小时43分钟”的注销时间和登录时间是不同的。所以要存储4小时43分钟,我宣布它是这样的: duration time NOT NULLMySQL存储持续时间 - 数据类型?

这是有效的或更好的方式来存储?我需要存储在数据库中,因为我需要将其他计算用于+其他用例。

回答

32

将它存储为整数秒是最好的方法。

  • UPDATE将是清洁和简单的 - 即duration = duration + $increment
  • 如狄指出的,有limitations使用TIME场 - 例如“TIME的值范围可以从'-838:59:59''838:59:59'
  • 天/小时/分钟/秒显示格式不会被硬编码。
  • 执行其他计算在使用整数“秒数”字段时几乎肯定会更清晰。
+0

好吧,听起来善意用int,谢谢。 – Juds 2010-12-22 02:15:35

+1

我一定会用'TIME'去。我无法想象任何人在线连续花费34天。如果是这样,我准备让这种罕见的情况发生错误。 'UPDATE'语句可以使用'ADDTIME()'轻松完成。有了这个,你还可以添加像30分钟和23秒,而无需将其转换为秒。没有什么是硬编码的,你总是可以做'TIME_TO_SEC()' - 如果你真的需要这个(我怀疑)。 – Gerald 2016-09-03 14:14:38

0

我不会使用时间,因为你将被限制为24小时。最简单的方法就是在几分钟内存储一个整数(或者取决于你需要的分辨率的秒数)。

+0

整数将不会给出像4小时45分32秒准确的时间,除非我在几秒钟内存储?我希望能够自动格式化数据库中的条目x小时x分钟。 (也许会增加x秒),而不是将其存储为474747474秒,然后再次需要将其转换为人类可读形式。 – Juds 2010-12-21 11:20:59

+0

@Juds我认为在DB中格式化时间间隔的方便性超过了@Tristram和@Riedsio提到的许多其他因素。为什么不让间隔格式化成为表示层关心? :) – 2010-12-21 20:38:36

+5

时间不限于24小时,见上面 – Ashley 2013-03-29 11:44:11