当 PHP 是您的主要语言时,在 SQL Server 数据库中存储日期/时间的首选格式是什么


What is the preferred format to store date/times in a SQL Server database when PHP is your primary language?

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

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

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

我会以 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', ? ) 
) 

其中参数 1 为 int($unixDate)

我建议对任何数据库引擎中的所有日期(数据库本机类型)进行相同的操作。(日期时间)

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

-

在此处编辑以回应下面的评论 -

  1. 对于选定的列,您可以使用$timestamp = strtotime( $yourColumnValue );
  2. 我建议以 databas 本机格式存储,因为您可以使用 SQL 使用 SQL 日期/时间函数(如 DATEADD() 等)比较记录。

大家好,美好的一天

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

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

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

YYYY 是年份 [所有数字,即 2100]MM 是月份 [01(1 月)至 12 日(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

没有了....再见