日期未针对时区进行调整

时间:2018-11-12 14:15:51

标签: sql-server-2012 php-7

INSPDATE是MS SQL数据库中的日期时间字段。通常,当我们输入日期时,浏览器会自动将其更正为我们的EST,但不适用于我正在创建的检查报告。我尝试过

echo date('m/d/Y  g:i a ', strtotime($row['INSPDATE']));

但是它返回的日期是1970年(12/31/1969 7:00 pm),并且没有从数据库中提取值。

下面是我使用的返回日期,就像它保存在数据库中一样。我知道有一种方法可以减去18000以调整为EST(-5小时),但是我不确定将其放置在何处。我收到有关混合日期时间和非数字值的错误消息。

<?php

require_once ('connection.php');

$sql = "SELECT INSPDATE, FACILID FROM dbo.SWFACILITYINSPECTION WHERE FACILID = 'E667'";
$query = sqlsrv_query( $conn, $sql );
while ($row=sqlsrv_fetch_array( $query )) {

//This will show dates, but it's database time (UTC, so +5 hours)
echo date_format($row['INSPDATE'], 'm/d/Y  g:i a ');

}

?>

1 个答案:

答案 0 :(得分:0)

您应该始终在应用程序逻辑中进行此转换,因为您的sql是内联的,所以我想您可以将计算嵌入到sql中。如果我对PHP有更好的了解,那么我将更倾向于使用应用程序的语言来学习日期数学,这样您就可以构建一个时区库以用于其他日期的日期,并释放您的查询,将过程存储为仅查询和返回数据的存储过程。

DECLARE @Offset INT = -5

SELECT INSPDATE_UTC=INSPDATE, INSPDATE_LOCAL = DATEADD(HOUR, @Offset,INSPDATE)