PHP/Oracle:时间表示
免责声明:我完全知道表示日期/时间的最佳方式是Unix时间戳或PHP的PHP/Oracle:时间表示,php,oracle,types,time,Php,Oracle,Types,Time,免责声明:我完全知道表示日期/时间的最佳方式是Unix时间戳或PHP的DateTime类和Oracle的date数据类型 有了这些,我想知道最适合存储时间数据的数据类型是什么(在PHP和Oracle中)。我对存储日期组件不感兴趣;只有时间 例如,假设我有一个员工实体,我想存储他/她的典型工作计划。该员工可能在上午8:00至下午5:00工作。这些时间没有日期组件,那么应该使用什么来存储和表示它们呢 我考虑过的备选方案: 作为字符串,使用标准格式(可能是24小时HH:MM:SS+Z) 如果您根本不需
DateTime
类和Oracle的date
数据类型
有了这些,我想知道最适合存储时间数据的数据类型是什么(在PHP和Oracle中)。我对存储日期组件不感兴趣;只有时间
例如,假设我有一个员工
实体,我想存储他/她的典型工作计划。该员工可能在上午8:00至下午5:00工作。这些时间没有日期组件,那么应该使用什么来存储和表示它们呢
我考虑过的备选方案:
间隔日
数据类型。我还没有必要实际使用它,但以下应该可以:
您使用的选项(3)是最好的
Oracle具有以下用于存储时间和日期的类型:
- 日期
- 时间戳(带(本地)时区)
- 年复一月
- 隔日
有关oracle日期类型的更多信息:我认为这个问题的最正确答案完全取决于您计划如何处理数据。如果您计划在PHP中完成所有工作,而不在数据库中执行任何操作,那么存储数据的最佳方法就是以最简单的格式获取数据,以帮助您在PHP中完成工作。这可能确实是将它们存储为字符串。对于DBA来说,这可能听起来很可怕,但您必须记住,数据库是为您的应用程序服务的。另一方面,如果您在数据库中使用一些奇特的查询进行大量比较,请确保以使查询最高效的格式存储数据库中的所有内容 如果您正在执行诸如重载计算工作小时数之类的任务,那么在最终转换回小时数:分钟数之前,将其转换为十进制格式可能会使计算变得更容易。当您从数据库获取数据时,可以编写一个简单的函数来来回转换十进制数,将其转换为十进制数,进行所有计算,然后运行它以转换回时间格式 在计算日期时,使用unix时间戳很方便,但在计算时间时,可能不会太方便。虽然使用它似乎有一些积极的方面,例如非常容易地在时间戳中添加时间戳,但我发现必须将所有内容转换为时间戳以进行计算是令人讨厌的,因此我将避开这种情况 总而言之:
编辑:我刚刚和一个朋友聊了一次关于时间类型的有趣的话题。另一件您应该注意的事情是,有时基于时间的对象可能会导致比它们解决的问题更多的问题。他正在研究一个我们跟踪交货日期和时间的应用程序。数据实际上存储在datetime对象中,但关键是:卡车交付时间是为特定的一天和交付窗口设置的。可接受的交货要么准时,要么在交货后一小时内交货。当一辆卡车在晚上11:30到达并在45分钟后出现时,这造成了一些混乱。虽然仍在可接受的时间范围内,但第二天就出现了。另一个问题是在一个配送中心,该配送中心从24小时开始,每天的工作时间为凌晨4点。设置员工的工作时间——并将其合并为围绕正常日期的付款证明是一件非常头痛的事情。如果可能的话,始终使用本地表示法,因此#3我不太理解#2:如果数据表示小时,为什么需要存储时区信息?我认为它们将根据上下文与本地时区保持一致。或者,您是否也要将区域信息与时间一起存储?您可以在查找表中使用整数,也可以直接在该点上使用字符串字段。@drrcknlsn刚刚添加了另一个您可能感兴趣的编辑。@Fluffeh:谢谢,这也是我需要注意的。看到您后来对您的问题进行了悬赏,这没有帮助吗?没有,对不起。您的解决方案不允许我存储诸如“10:30pm”之类的数据。时间间隔就是那个时间间隔。我需要存储特定的时间,而不是间隔,而且我需要在不考虑日期的情况下进行存储。嗯,可以使用小于1天的时间间隔来存储小时,尽管它确实是
interval day(0) to second(6)