从斜线之间的日期中提取文本
Extract Text From Date Between Slashes
我正在尝试将日期从短日期格式(例如 07/31/2018)重新格式化为此自定义格式 MMDDYY。所以如果日期是 07/31/2018,我想把它设为 073118。
我真的不知道该怎么做。下面的代码让我提取第一个斜线左侧的前两位数字。但我不确定如何提取其余部分以及如何使用两个斜杠解决提取问题。有人可以引导我朝着正确的方向完成这项工作吗?
If InStr(strRDate, "/") > 0 Then
strRDateL = Left(strRDate, InStr(strRDate, "/")-1)
If Len(strRDateL)=2 Then
subMoveCursor 11, 10
subEnterData strRDateL
End If
End If
您需要将自己的日期写入字符串函数。
最简单的方法可能是使用 IsDate()
函数查看您的字符串是否被识别为日期。然后您可以使用 CDate()
函数将其转换为 Date
对象。
然后您可以使用其他内置日期函数来获取日期的 Month
、Day
和 Year
部分。
strDate = "07/31/2018"
WScript.Echo FormatDate(strDate)
WScript.Echo FormatDateString(strDate)
Function FormatDate(strDate)
If IsDate(strDate) Then
dtmDate = CDate(strDate)
return = Right("0" & Month(dtmDate),2) & Right("0" & Day(dtmDate),2) & Right(Year(dtmDate),2)
Else
return = strDate
End If
FormatDate = return
End Function
如果您不想这样做,另一种选择是直接格式化传入的字符串。这将要求您确定输入字符串将始终采用相同的格式。
Function FormatDateString(strDate)
'Add more error checking?
FormatDateString = Split(strDate,"/")(0) & Split(strDate,"/")(1) & Right(strDate,2)
End Function
例如,7-31-2018
在 FormatDateString
中会失败,但在 FormatDate
中会成功。
问题不是日期格式问题,而是字符串操作问题。您有一个 string 表示特定格式的日期;任务是删除一些不需要的字符:
Dim aT : aT = Split("07/31/2018,073118 01/01/0001,010101")
Dim sP, aP, sL, sExp, sAct
For Each sP in aT ' get pair
aP = Split(sP, ",") ' split into long anf short parts
sL = aP(0)
sExp = aP(1)
sAct = Left(sL, 2) & Mid(sL, 4, 2) & Right(sL, 2)
WScript.Echo sL, sAct, CStr(sAct = sExp)
Next
输出:
cscript 51617746.vbs
07/31/2018 073118 Wahr
01/01/0001 010101 Wahr
如果您可以绝对确定格式就是您显示的格式(因为它是一个日期,它几乎从来不是,但仍然如此),只需将其视为一个字符串并执行如下操作:
Dim dt : dt = "07/31/2018" 'define "date" as a string
Dim a : a = Split(dt, "/") 'split string to array
WScript.Echo a(0) & a(1) & Right(a(2),2) ' emit to console
这当然不会检查传递的值是否实际上是日期,但这是我能想到的最短的方法,无需求助于 Mid()
。
这就是我让它工作的方式。
If InStr(strRDate, "/") > 0 Then
strRDateSplit = Split(strRDate, "/")
subMoveCursor 11, 10
subEnterData strRDateSplit(0) & strRDateSplit(1) & Right(strRDateSplit(2),2)
Else
subMoveCursor 11, 10
subEnterData rw.Cells(3).Value
End If
我正在尝试将日期从短日期格式(例如 07/31/2018)重新格式化为此自定义格式 MMDDYY。所以如果日期是 07/31/2018,我想把它设为 073118。
我真的不知道该怎么做。下面的代码让我提取第一个斜线左侧的前两位数字。但我不确定如何提取其余部分以及如何使用两个斜杠解决提取问题。有人可以引导我朝着正确的方向完成这项工作吗?
If InStr(strRDate, "/") > 0 Then
strRDateL = Left(strRDate, InStr(strRDate, "/")-1)
If Len(strRDateL)=2 Then
subMoveCursor 11, 10
subEnterData strRDateL
End If
End If
您需要将自己的日期写入字符串函数。
最简单的方法可能是使用 IsDate()
函数查看您的字符串是否被识别为日期。然后您可以使用 CDate()
函数将其转换为 Date
对象。
然后您可以使用其他内置日期函数来获取日期的 Month
、Day
和 Year
部分。
strDate = "07/31/2018"
WScript.Echo FormatDate(strDate)
WScript.Echo FormatDateString(strDate)
Function FormatDate(strDate)
If IsDate(strDate) Then
dtmDate = CDate(strDate)
return = Right("0" & Month(dtmDate),2) & Right("0" & Day(dtmDate),2) & Right(Year(dtmDate),2)
Else
return = strDate
End If
FormatDate = return
End Function
如果您不想这样做,另一种选择是直接格式化传入的字符串。这将要求您确定输入字符串将始终采用相同的格式。
Function FormatDateString(strDate)
'Add more error checking?
FormatDateString = Split(strDate,"/")(0) & Split(strDate,"/")(1) & Right(strDate,2)
End Function
例如,7-31-2018
在 FormatDateString
中会失败,但在 FormatDate
中会成功。
问题不是日期格式问题,而是字符串操作问题。您有一个 string 表示特定格式的日期;任务是删除一些不需要的字符:
Dim aT : aT = Split("07/31/2018,073118 01/01/0001,010101")
Dim sP, aP, sL, sExp, sAct
For Each sP in aT ' get pair
aP = Split(sP, ",") ' split into long anf short parts
sL = aP(0)
sExp = aP(1)
sAct = Left(sL, 2) & Mid(sL, 4, 2) & Right(sL, 2)
WScript.Echo sL, sAct, CStr(sAct = sExp)
Next
输出:
cscript 51617746.vbs
07/31/2018 073118 Wahr
01/01/0001 010101 Wahr
如果您可以绝对确定格式就是您显示的格式(因为它是一个日期,它几乎从来不是,但仍然如此),只需将其视为一个字符串并执行如下操作:
Dim dt : dt = "07/31/2018" 'define "date" as a string
Dim a : a = Split(dt, "/") 'split string to array
WScript.Echo a(0) & a(1) & Right(a(2),2) ' emit to console
这当然不会检查传递的值是否实际上是日期,但这是我能想到的最短的方法,无需求助于 Mid()
。
这就是我让它工作的方式。
If InStr(strRDate, "/") > 0 Then
strRDateSplit = Split(strRDate, "/")
subMoveCursor 11, 10
subEnterData strRDateSplit(0) & strRDateSplit(1) & Right(strRDateSplit(2),2)
Else
subMoveCursor 11, 10
subEnterData rw.Cells(3).Value
End If