使用CDate在经典ASP中遇到五月问题

时间:2017-05-03 15:16:13

标签: api vbscript asp-classic

我们在4月份创建了一个日期转换器,
哪个在4月30日之前工作得很好,但现在它无法正常工作。

月份变为5月时发生问题,
这是我的静态数据代码。

thisMonth = Month(CDate("April 29, 2017"))

这是有效的,但如果我添加月份,

thisMonth = Month(CDate("May 1, 2017"))

它给了我以下错误,

  

Microsoft VBScript运行时
  错误'800a000d'
  类型不匹配:'CDate'

这真是一种奇怪的行为。

顺便说一句,这是在API中。

1 个答案:

答案 0 :(得分:1)

这完全取决于LCID设置的内容,以确定VBScript是否能够正确转换日期。

因此,如果您希望以dd mmm, yyyy格式投放日期,则需要确保在调用{{1}之前使用2057 1033CDate() }}

以下是重新创建问题的基本示例(猜测LCID:1081是您在Classic ASP中可能设置的内容,具体取决于服务器的系统区域设置);

<%
Option Explicit

Const LOCALE_EN_GB = 2057
Const LOCALE_EN_US = 1033
Const LOCALE_HI = 1081

Response.Charset = "UTF-8"
Response.CodePage = 65001

Call Response.Write("Current LCID: " & GetLocale() & "<br /><br />")
Call Response.Write("--- Starting Tests ---<br />")
Call TestDates(LOCALE_EN_GB)
Call TestDates(LOCALE_EN_US)
Call TestDates(LOCALE_HI)

Sub TestDates(loc)
  Call SetLocale(loc)
  Call Response.Write("LCID: " & loc & " Test Date: " & FormatDateTime(Date(), vbLongDate) & "<br />")

  Dim ds: ds = Array("April 29, 2017", "May 1, 2017")
  Dim d

  For Each d In ds
    Call Response.Write(CDate(d) & "<br />")
  Next
End Sub
%>

输出:

Current LCID: 2057

--- Starting Tests ---
LCID: 2057 Test Date: 03 May 2017
29/04/2017
01/05/2017
LCID: 1033 Test Date: Wednesday, May 3, 2017
4/29/2017
5/1/2017
LCID: 1081 Test Date: 03 मई 2017
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'CDate'

有用的链接