使用 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
形式转换日期,您需要确保在调用 2057
或 1033
之前使用 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'
有用的链接
我们在四月份创建了一个日期转换器,
在 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
形式转换日期,您需要确保在调用 2057
或 1033
之前使用 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'