使用 CDate 的 Classic ASP 中的五月有问题

Having issue with May Month in Classic ASP using CDate

我们在四月份创建了一个日期转换器,
在 4 月 30 日之前一直运行良好,但现在无法正常运行。

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

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

这是可行的,但是如果我添加月份 May,

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

它给我以下错误,

Microsoft VBScript runtime
error '800a000d'
Type mismatch: 'CDate'

这真是奇怪的行为。

顺便说一句,这是在 API.

VBScript 能否正确转换日期完全取决于 LCID 的设置。

因此,如果您想以 dd mmm, yyyy 形式转换日期,您需要确保在调用 20571033 之前使用 Call SetLocale(...) =16=].

这是一个重现问题的基本示例(猜测 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'

有用的链接