我已经尝试了所有我看到的一个月添加到一个特定日期的方式,然后返回,在一个特定的格式,但我不知所措。 这里是我的代码,但我需要对其进行格式化:
replace( formatdatetime( dateadd( "m" , 1 , request("date") ), 0 ) , "/" , "-" ) & "' )
request("date")
是在yyyyy-dd-mm hh:mm:ss
格式,这就是我需要的新的日期。
我已经尝试了所有我看到的一个月添加到一个特定日期的方式,然后返回,在一个特定的格式,但我不知所措。 这里是我的代码,但我需要对其进行格式化:
replace( formatdatetime( dateadd( "m" , 1 , request("date") ), 0 ) , "/" , "-" ) & "' )
request("date")
是在yyyyy-dd-mm hh:mm:ss
格式,这就是我需要的新的日期。
下面应该工作完美:
replace( formatdatetime( dateadd( "m" , 1 , cDate(request("date")) ), 0 ) , "/" , "-" )
注意使用的cDate
函数的值转换为日期明确。
编辑:
我删除了你的代码的最后一部分& "' )
否则它给了我一个错误。
当使用日期,它采取适当的数据(子)类型的护理尤为重要。 饲养字符串到预计日期的功能(并依托“的VBScript - 和你的本地设置 - 会做正确的事”)是危险的。
使用替代永远不会改变的日期部分的顺序。
的FormatDateTime取决于当地/区域设置,并应避免为确保道路灾难。
解决这个问题的一种方法+最看中的有关在VBScript格式的所有其他问题的方法是使用一个.net System.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
和main.vbs:
' main.vbs - demo use of library/module Lib.vbs
' Globals
Dim gsLibDir : gsLibDir = ".\"
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
' LibraryInclude
ExecuteGlobal goFS.OpenTextFile(goFS.BuildPath(gsLibDir, "Lib.vbs")).ReadAll()
WScript.Quit demoDateFormat()
WScript.Quit main()
Function main()
Dim o : Set o = New ToBeAShamedOf
o.a = 4711
o.b = "whatever"
WScript.Echo o.a, o.b
main = 1 ' can't call this a success
End Function ' main
Function demoDateFormat()
Dim sD : sD = "2012-05-16 01:02:03" ' near future; not yyyyy!
Dim dtD : dtD = CDate(sD)
Dim dtDM : dtDM = DateAdd("m", 1, dtD)
Dim oFmt : Set oFmt = New cFormat
WScript.Echo oFmt.formatArray( _
" sD: {1}{0} dtD: {2}{0} dtDM: {3}{0}dtDM': {4}" _
, Array(vbCrLf, sD, dtD, dtDM, oFmt.formatOne("{0:yyyy-MM-dd hh:mm:ss}", dtDM)))
demoDateFormat = 0 ' seems to be decent
End Function ' demoDateFormat
你会得到:
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个月申请,然后重新生成的字符串。
注:请求(“日期”)看起来好像返回当前日期时间,以便运行它以这种方式来生成最终值是一秒钟左右了,如果这是一个问题,那么你将得到更好的存储在一个静态值变量,否则这应该有希望是好的。