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

当PHP是您的主要语言时,在SQL Server数据库中存储日期/时间的首选格式是什么?,php,sql-server,datetime,time,Php,Sql Server,Datetime,Time,我正在计划一个PHP应用程序,它需要在MSSQL数据库中存储日期/时间。(出于好奇,这是一个日历应用程序。)存储此信息的首选格式是什么 MSSQL有自己的datetime数据类型,它在数据库中工作良好,可读性很强。但是,没有任何MSSQL函数将日期时间值转换为PHP的首选格式——UNIX时间戳。这使得与PHP一起使用有点痛苦。UNIX时间戳很有吸引力,因为这正是PHP喜欢的,但它的可读性肯定没有那么好,而且没有一堆好的内置MSSQL函数来处理数据 您是将此信息存储为datetime数据类型、UN

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

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


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

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

只需使用“YYYY-MM-DD HH:MM:SS”在php中插入:
date('Y-m-dh:i:s',$mytimestampinsensionds)

-在此处编辑以下评论-

  • 对于所选列,可以使用
    $timestamp=($yourColumnValue)
  • 我建议以DatabaseNative格式存储,因为这样您就可以使用SQL来比较使用SQL日期/时间函数(如DATEADD()等)的记录

  • 我将以MS-SQL格式存储日期,以帮助充分使用T-SQL中的日期操纵函数。它更容易写和读

    SELECT * FROM Foo
    WHERE DateDiff(d,field1,now()) < 1
    
    要将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)

    大家好,祝大家好

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

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

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

    YYYY是年份[所有数字,即2100] MM为月份[01(一月)至12(十二月)] DD是一天[01到31],取决于蛾类:P

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

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

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

    没有了。。。。
    再见

    插入很容易,选择数据后再使用数据更麻烦。此外,您建议以这种方式存储数据,但您能否详细说明为什么推荐它?Joe Lencioni插入速度更快,因为它只是数字,比较是数字,并且不可能使值的较后日期小于前一日期。它是标准化的(ISO8601),将任何类型的日期转换为该字符串格式(以及将其转换为整数)并不复杂。在日期类型中,程序用于转换和生成comparisons@JoeLencioni:因为数据库会知道你在处理日期时间,我敢打赌,那些为任何一个普遍可用的数据库平台编写日期和时间逻辑的人在这方面比任何随机的web开发人员都要好得多问题。处理日期/时间值很难,不要自己做。在ISO-8601日期格式中,我不喜欢的是日期部分和时间部分之间的“t”。但好的方面是,这种格式的datetimes排序以及普通字符串。2006年11月2日发布的PHP 5.2.0(在这个问题出现前两年)引入了DateTime类。这(以及它的相关类和派生类)现在就是在PHP中处理日期和时间的方式。考虑一下你的生日是否在1970岁之前。如何将其存储为Unix时间戳?您还必须知道,这个特定的整数不是一个常规整数,而是一个Unix时间戳。使用说明它是什么的类。
    INSERT INTO TableName ( 
      fieldName
    ) VALUES (
      DATEADD(s,'1970-01-01 00:00:00', ? ) 
    )