PHP ISO 8601格式和SQL Server - 时区

时间:2011-12-20 08:37:15

标签: php sql-server-2008 zend-framework datetime pdo

尝试使用PHP以编程方式插入数据时,通过函数

date('c')

它以下列格式返回日期......

2011-12-20T19:01:03+11:00

但是在插入SQL Server数据库时这不适用。它将返回错误...

  

从字符串

转换日期和/或时间时转换失败

现在当然有很多方法可以解决这个问题。插入数据时可以轻松浏览并更改格式,并指定yyyy-mm-dd hh:mm:ss(不准确)。但是,我更愿意使用日期(' c')格式并依赖该调用来处理我的问题。

我使用PDO和Zend_DB连接到数据库。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您用于日期存储的字段类型是什么?它不适用于日期时间。

快速测试:

-- shows error
CREATE TABLE #tmp1 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt1 datetime
)
GO

INSERT INTO #tmp1 (
    c1,
    dto1,
    dt1
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp1

DROP TABLE #tmp1
GO

-- works - datetime2
CREATE TABLE #tmp2 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt2 datetime2
)
GO

INSERT INTO #tmp2 (
    c1,
    dto1,
    dt2
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp2

DROP TABLE #tmp2
GO