IIS6和IIS8之间的经典ASP,DATE差异

时间:2015-03-05 17:43:27

标签: ms-access iis asp-classic

我正在帮助将经典的asp网站(前端)和ms访问数据库(后端)从Windows 2003 IIS6服务器迁移到Windows 2012 IIS 8.5服务器。我特别对这个查询有问题;

sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate from table where CDate(EndDate) <= CDate('"&Date()&"') order by CDate(EndDate) desc"

在现有系统上一切正常。在新系统上,返回的结果不是&lt; =“今天的日期”。结果显示了今天之前和之后的一些日期。数据库日期字段只是“文本”(我没有设置),虽然我最初的想法是将模式更改为正确的日期,但我想了解问题,特别是因为系统的许多部分使用date()和CDate使用类似的查询。 IIS服务器之间是否存在潜在的日期差异?我看过浏览器的位置,一切都很好。

任何指针?

1 个答案:

答案 0 :(得分:1)

检查查询中使用的此表达式:

CDate('"&Date()&"')

Date()函数将系统日期作为日期/时间值返回。但是,该表达式在Date / Time值之前和之后添加引号,将其转换为字符串值。然后CDate()获取该字符串并再次将其转换回日期/时间值。

希望这种描述可以说服那些操作最好浪费精力。但是,如果两台服务器具有不同的日期格式设置,那么完整CDate()表达式产生的日期可能会有所不同。

我不是肯定的,这是你问题的根源,但你可以很容易地消除这种可能性。 Access数据库引擎支持Date()函数,因此您可以直接使用它,而无需先将其转换为字符串,然后再转换为日期/时间值。

sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate " & _
    "from [table] where CDate(EndDate) <= Date() order by CDate(EndDate) desc"

如果该更改无法解决问题,请接下来检查这些 EndDate 文本值,并确保它们被解释为您期望的日期:

SELECT EndDate, CDate(EndDate) AS EndDate_as_date
FROM [table];

您提到“最初的想法是将架构更改为正确的日期”。我认为这是最好的方法,因为基于日期的开发日期/时间比日期作为字符串更加清晰。