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

时间:2008-10-22 20:31:22

标签: php sql-server datetime time

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

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

您是将这些信息作为日期时间数据类型存储为UNIX时间戳(如int,bigint或varchar数据类型),并列为两种格式,还是完全不同的其他格式?

3 个答案:

答案 0 :(得分: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', ? ) 
) 

其中参数one为int($ unixDate)

答案 1 :(得分:4)

我建议和任何数据库引擎中的所有日期一样,db本机类型。 (DATETIME)

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

-edit响应下面的评论 -

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

答案 2 :(得分:2)

你好,大家好日子

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

但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

没有...... 再见