Asp classic 特殊格式的DateAdd()

Asp classic 特殊格式的DateAdd(),asp-classic,vbscript,Asp Classic,Vbscript,我尝试了所有我看到的方法,在某个日期加上一个月,然后以特定的格式返回,但我不知所措。这是我的代码,但我需要格式化它: replace(formatdatetime(dateadd(“m”,1,request(“date”)),0),“/”,“-”&“) 请求(“日期”)是yyyy-dd-mm hh:mm:ss格式,这就是我需要新日期的方式。以下内容应该可以完美地工作: replace( formatdatetime( dateadd( "m" , 1 , cDate(request("date

我尝试了所有我看到的方法,在某个日期加上一个月,然后以特定的格式返回,但我不知所措。这是我的代码,但我需要格式化它:

replace(formatdatetime(dateadd(“m”,1,request(“date”)),0),“/”,“-”&“)

请求(“日期”)
yyyy-dd-mm hh:mm:ss
格式,这就是我需要新日期的方式。

以下内容应该可以完美地工作:

replace( formatdatetime( dateadd( "m" , 1 , cDate(request("date")) ), 0 ) , "/" , "-" )
请注意使用
cDate
函数将值显式转换为日期

编辑:


我删除了您代码的最后一部分
&“')
,否则它会给我一个错误。

以下内容应该可以很好地工作:

replace( formatdatetime( dateadd( "m" , 1 , cDate(request("date")) ), 0 ) , "/" , "-" )
请注意使用
cDate
函数将值显式转换为日期

编辑:


我删除了代码的最后一部分。&'),否则会给我一个错误。

在处理日期时,特别重要的是要注意正确的数据(子)类型。将字符串提供给期望日期的函数(并且依靠“VBScript”和您的本地设置将做正确的事情)是危险的

使用“替换”永远不会更改日期零件的顺序

FormatDateTime取决于本地/区域设置,应避免将其作为导致灾难的可靠途径

解决此问题的一种方法+与VBScript格式有关的大多数其他问题是使用.NetSystem.Text.StringBuilder

给定Lib.vbs:

' Lib.vbs - simple VBScript library/module
' use
'  ExecuteGlobal goFS.OpenTextFile(<PathTo\Lib.vbs>).ReadAll()
' to 'include' Lib.vbs in you main script

Class ToBeAShamedOf
  Public a
  Public b
End Class ' ToBeAShamedOf

Class cFormat
  Private m_oSB
  Private Sub Class_Initialize()
    Set m_oSB = CreateObject("System.Text.StringBuilder")
  End Sub ' Class_Initialize
  Public Function formatOne(sFmt, vElm)
    m_oSB.AppendFormat sFmt, vElm
    formatOne = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatOne
  Public Function formatArray(sFmt, aElms)
    m_oSB.AppendFormat_4 sFmt, (aElms)
    formatArray = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatArray
End Class ' cFormat
您将获得:

cscript main.vbs
   sD: 2012-05-16 01:02:03
  dtD: 16.05.2012 01:02:03
 dtDM: 16.06.2012 01:02:03
dtDM': 2012-06-16 01:02:03

(可以在的上下文中看到)

在处理日期时,特别重要的是要注意正确的数据(子)类型。将字符串馈送到期望日期的函数(并依靠“VBScript-和您的本地设置-将做正确的事情”)是危险的

使用“替换”永远不会更改日期零件的顺序

FormatDateTime取决于本地/区域设置,应避免将其作为导致灾难的可靠途径

解决此问题的一种方法+与VBScript格式有关的大多数其他问题是使用.NetSystem.Text.StringBuilder

给定Lib.vbs:

' Lib.vbs - simple VBScript library/module
' use
'  ExecuteGlobal goFS.OpenTextFile(<PathTo\Lib.vbs>).ReadAll()
' to 'include' Lib.vbs in you main script

Class ToBeAShamedOf
  Public a
  Public b
End Class ' ToBeAShamedOf

Class cFormat
  Private m_oSB
  Private Sub Class_Initialize()
    Set m_oSB = CreateObject("System.Text.StringBuilder")
  End Sub ' Class_Initialize
  Public Function formatOne(sFmt, vElm)
    m_oSB.AppendFormat sFmt, vElm
    formatOne = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatOne
  Public Function formatArray(sFmt, aElms)
    m_oSB.AppendFormat_4 sFmt, (aElms)
    formatArray = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatArray
End Class ' cFormat
您将获得:

cscript main.vbs
   sD: 2012-05-16 01:02:03
  dtD: 16.05.2012 01:02:03
 dtDM: 16.06.2012 01:02:03
dtDM': 2012-06-16 01:02:03
(在上下文中可以看到)

这可能有助于:

FormatDateTime(DateAdd("M",1,DateSerial(Left(request("date"),4),Mid(request("date"),9,2),Mid(request("date"),6,2))) & " " & Mid(request("date"),12,8),d,0)
它基本上将字符串转换为本机格式的有效日期,添加请求的1个月,然后重新生成字符串

注意:请求(“日期”)看起来像是返回当前日期时间,因此以这种方式运行它可能会生成一个秒左右的最终值,如果这是一个问题,那么您最好在变量中存储一个静态值,否则这应该是可以的。

这可能会有帮助:

FormatDateTime(DateAdd("M",1,DateSerial(Left(request("date"),4),Mid(request("date"),9,2),Mid(request("date"),6,2))) & " " & Mid(request("date"),12,8),d,0)
它基本上将字符串转换为本机格式的有效日期,添加请求的1个月,然后重新生成字符串


注意:请求(“日期”)看起来像是返回当前日期时间,因此以这种方式运行它可能会生成一个秒左右的最终值,如果这是一个问题,那么您最好在变量中存储一个静态值,否则这应该是可以的。

这种格式(值、格式字符串)在哪里函数来自?@Ekkehard.Horner我很困惑,你是说这不被认为是vbs命令。格式是VBA/VB6的一部分,因此在vbs中应该同样可用?@Ekkehard.Horner是的,我的错误,大多数都是可用的,但是这一个被FormatDateTime取代了,我已经修改了我的帖子,干杯^ ^这个格式在哪里(值,格式化字符串)函数来自?@Ekkehard.Horner我很困惑,你是说这不被认为是vbs命令。格式是VBA/VB6的一部分,因此在vbs中应该同样可用?@Ekkehard.Horner是的,我的错误,大多数都是有用的,但这一个被FormatDateTime取代了,我已经修改了我的帖子,干杯^ ^这是ASP经典,不仅仅是VB脚本。
WScript
不可用,
CreateObject
需要
Server
前缀。不幸的是,.NET不是一个选项。这是ASP经典,而不仅仅是VBScript。
WScript
不可用,
CreateObject
需要
服务器
前缀。不幸的是,.NET不是一个选项。我意外地加入了包含了我将此作为一部分的SQL的一部分;这就是
&“')
的内容;这就是
&“')
的内容。