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的一部分;这就是&“')
的内容;这就是&“')
的内容。