12

我正在计划一个需要在 MSSQL 数据库中存储日期/时间的 PHP 应用程序。(好奇的是,它是一个日历应用程序。)存储这些信息的首选格式是什么?

MSSQL 有自己的 datetime 数据类型,在数据库本身中运行良好,可读性很强。但是,没有任何 MSSQL 函数可以将日期时间值转换为 PHP 的首选格式——UNIX 时间戳。这使得与 PHP 一起使用会更加痛苦。UNIX 时间戳很有吸引力,因为这正是 PHP 所喜欢的,但它的可读性肯定不高,而且没有一堆很好的内置 MSSQL 函数来处理数据。

您会将这些信息存储为 datetime 数据类型、UNIX 时间戳(作为 int、bigint 或 varchar 数据类型)、两种格式并排存储,还是完全存储为其他格式?

4

3 回答 3

13

我会以 MS-SQL 格式存储日期,以帮助充分利用 T-SQL 中的日期操作函数。更容易书写和阅读

SELECT * FROM Foo
WHERE DateDiff(d,field1,now()) < 1

而不是通过操作整数来尝试执行等效操作

要将 MsSQL 日期转换为 unix 时间戳,请使用 dateDiff:

SELECT DATEDIFF(s,'1970-01-01 00:00:00',fieldName) as fieldNameTS
FROM TableName
WHERE fieldName between '10/1/2008' and '10/31/2008'

要将 Unix 时间戳转换为 MsSQL 日期,您可以在 PHP 中执行此操作:

$msSQLDate = date("Y-m-d H:i:s", $unixDate );

或在 MsSQL 中

INSERT INTO TableName ( 
  fieldName
) VALUES (
  DATEADD(s,'1970-01-01 00:00:00', ? ) 
) 

其中参数一是 int($unixDate)

于 2008-10-22T20:51:57.700 回答
5

我建议对任何 db 引擎中的所有日期都使用相同的方法,即 db 本机类型。(约会时间)

只需使用 "YYYY-MM-DD HH:MM:SS" 插入 php:date('Y-m-d H:i:s', $myTimeStampInSeconds);

- 编辑以回应下面的评论 -

  1. 对于您可以使用的选定列$timestamp = strtotime( $yourColumnValue );
  2. 我建议以数据库本机格式存储,因为然后您可以使用 SQL 使用 SQL 日期/时间函数(如 DATEADD() 等)比较记录。
于 2008-10-22T20:36:44.847 回答
3

大家好,美好的一天

是的,这可能是最好的方法,将日期存储在 db 中,它们将采用 db 格式,您可以在需要时根据需要进行格式化

但是在 ISO 开发的国际日期格式中还有另一种解决方案,我的意思是 ISO 8601。

ISO (ISO 8601) 定义的国际格式试图通过定义数字日期系统来解决所有日期问题,如下所示:YYYY-MM-DD 其中

YYYY 是年份 [所有数字,即 2100] MM 是月份 [01(一月)到 12(十二月)] DD 是日期 [01 到 31],具体取决于飞蛾:P

使用数字日期在可读性和可用性方面也存在一些缺陷,它并不完美。但是,ISO 日期格式是普遍(且准确)可理解的日期表示的最佳选择。

请注意,此格式还可用于表示精确的日期和时间,以及时区信息

这是有关 ISO 8601:2000 的详细信息

http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm

没有了……再见

于 2008-10-23T10:52:18.940 回答