FtD*_*Xw6 10 php oracle time types
免责声明:我完全清楚表示日期/时间的最佳方式是Unix时间戳或PHP的DateTime类和Oracle的DATE数据类型.
有了这个,我想知道什么是最适合存储时间数据的数据类型(在PHP中,以及Oracle).我对存储日期组件不感兴趣; 只有时间.
例如,假设我有一个employee实体,我想要存储他/她的典型工作时间表.该员工可能在上午8:00至下午5:00工作.这些时间没有日期组件,那么应该用什么来存储它们并代表它们呢?
我考虑的选项:
DateTime和Oracle DATE具有规范化/未使用的日期组件,例如0001-01-01.integer和Oracle TIMESTAMP).目前我正在使用#3,但有点让我感到困惑的是,我似乎在滥用这些数据类型.但是,就我所知,它提供了最佳的可用性.比较和排序PHP和Unix中预期的所有工作,可以维护时区数据,并且实际上不需要任何特殊操作来显示数据.
我忽略了什么,还是有更合适的方式?
我认为这个问题最正确的答案完全取决于您计划如何处理数据。如果您计划在 PHP 中完成所有工作而不在数据库中执行任何操作,那么存储数据的最佳方法将是对您来说最容易以有助于您在 PHP 中执行操作的格式获取数据。这可能确实将它们存储为字符串。对于 DBA 来说,这听起来可能很可怕,但您必须记住,数据库是为您的应用程序提供服务的。另一方面,如果您在数据库中使用一些奇特的查询进行大量比较,请确保以一种使查询最有效的格式将所有内容存储在数据库中。
如果您正在执行诸如计算工作时间之类的繁重任务,则在最终转换回小时:分钟之前,转换为十进制格式可能会使计算更容易。当您从数据库获取数据时,可以编写一个简单的函数来来回转换十进制,将其转换为十进制,进行所有计算,然后运行它以转换回时间格式。
当你计算日期时,使用 unix 时间戳很方便,但当你计算时间时,可能就不那么方便了。虽然使用它似乎有一些积极的一面,例如很容易地将时间戳添加到时间戳中,但我发现必须将所有内容都转换为时间戳进行计算是令人讨厌和烦人的,所以我会避开这种情况。
所以,总结一下:
编辑:我刚刚和一个朋友就时间类型进行了一次有趣的交谈。您应该注意的另一件事是,有时基于时间的对象可能会导致比它们解决的问题更多的问题。他正在研究一个我们可以跟踪交货日期和时间的应用程序。数据实际上存储在日期时间对象中,但有一个问题:卡车送货时间是针对特定日期和送货窗口设置的。可接受的交货时间要么是准时,要么是晚一小时内。当一辆卡车原定于晚上 11:30 到达并在 45 分钟后出现时,这造成了一些严重破坏。虽然仍在可接受的范围内,但它显示为第二天。另一个问题是在一个配送中心,该中心实际上每天 24 小时从凌晨 4:00 开始工作。设定时间对员工来说很有效,但事实证明,将其合并到围绕正常日期的付款中是相当令人头疼的。