为什么没有正确使用PHP / MSSQL的日期/时间?

时间:2013-02-07 21:45:47

标签: php sql-server datetime

我最近将服务器上运行的PHP版本升级到5.3.20。从那时起,每当我从MSSQL数据库(mssql_query)中提取日期时,我就会得到奇怪的错误日期。

我检查了区域设置,默认时区设置为'Australia / Brisbane',我还检查了php.ini设置并确认mssql.datetimeconvert已关闭。当选项打开时,日期似乎通过预格式化(没有秒数),但是当关闭该选项时,我得到的日期看起来像这样。

  

mssql.datetimeconvert(off):2013-07- 38 16:00:20

     

mssql.datetimeconvert(on):2013年2月7日09:37 PM

有简单的解决方法吗?

以下是比较mysql / mssql源之间输出的代码:

$rs = $db->query("select id, servertime from bobstable where id = 86427420");
$mss_set = mssql_query("select id, servertime from T_bobstable WITH (NOLOCK) where id = 86427420");

$myrow = $rs->fetch_assoc();
$msrow = mssql_fetch_array($mss_set);

var_dump($myrow);
echo "<br>";
var_dump($msrow);

输出如下:

array(2) { ["id"]=> string(8) "86427420" ["servertime"]=> string(19) "2013-02-08 14:00:24" } 
array(4) { [0]=> float(86427420) ["id"]=> float(86427420) [1]=> string(19) "2013-08-39 24:673:0" ["servertime"]=> string(19) "2013-08-39 24:673:0" }

这是我从SQL Server Studio

中收到的输出
2013-02-08 14:00:24.673

我可以理解它是如何被格式化的(因为下面已经回答了问题的这一部分)但我无法理解为什么它会以这种格式出现,或者如何更改PHP的配置以避免这种情况。在我升级PHP之前,它曾经以 2013-02-08 14:00:24 的形式出现。有没有人经历过或看到过这种情况?

2 个答案:

答案 0 :(得分:1)

找到一个似乎坚持的解决方案: -

我降级了服务器上安装的FreeTDS版本:

freetds.x86_64 0.91-2.el5  to 
freetds.x86_64 0.64-11.el5.centos

这确定了日期。

不知道为什么。

答案 1 :(得分:0)

今天2月7日DAYOFYEAR()是38岁。

可能问题出在日期格式