我用PHP编写了一个连接到SQL服务器的应用程序。如果该应用程序在windows上运行,它使用srvsql库,在linux情况下,它使用sybase库。我的问题是server的日期字段输出是不一样的,使用srvsql,我得到了类似于‘2012-10 12:14:26.067’的内容。使用sybase,我得到了‘12月10日2012年12月10日12:14:26:067 '!
如何在不更改每个查询的情况下将sybase连接设置为获得相同的输出格式?
发布于 2014-10-03 17:35:00
几个小时以来,我一直在寻找一个好的解决办法。虽然我希望处理这个php端,但在我目前的情况下,它不是一个选项,因为第三方库正在处理数据。我刚才偶然发现的解决方案是在查询方面。
粗略的想法是在返回结果之前将日期转换为字符串,以便库(在我的例子中是mssql和sqlsrv )没有机会处理结果。
CONVERT(nvarchar(30), myDate, 121) AS date121是yyyy dd hh:mi:ss.mmm(24小时)
其他选项可以在微软的文档中找到。
编辑
前几天发现了这个。还没有尝试过它,但是mssql库有一个设置来告诉它如何处理日期:mssql.datetimeconvert = On。在php.ini中可能有一种方法可以使两个库以相同的格式呈现日期。我太深入的转换解决方案,现在切换,但这将是值得一些实验,如果有人是第一次阅读。
发布于 2012-12-10 18:20:22
与其担心来自不同数据库的日期格式,不如考虑在PHP端处理它。
这两种格式(2012-12-10 12:14:26.067和Dec 10 2012 12:14:26:067PM)都是由PHP识别的。当被传递到一个DateTime对象中时,它们会像预期的那样工作。在PHP交互式提示符中:
php > $dt = new DateTime('Dec 10 2012 12:14:26:067PM');
php > echo $dt->format('r u'), "\n";
Mon, 10 Dec 2012 12:14:26 -0800 067000
php >
php > $dt = new DateTime('2012-12-10 12:14:26.067');
php > echo $dt->format('r u'), "\n";
Mon, 10 Dec 2012 12:14:26 -0800 067000如果需要刷新器,则r是RFC 2822日期的格式代码,而u是用于微秒的格式代码,仅适用于DateTimes。
通过切换到DateTimes,您可以轻松地在输入格式之间进行权衡,并且基本上不必担心它。DateTime使用解析规则。你会想了解它们的局限性,但通常不会碰到它们。
https://stackoverflow.com/questions/13799974
复制相似问题