从斜线之间的日期中提取文本

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 对象。

然后您可以使用其他内置日期函数来获取日期的 MonthDayYear 部分。

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-2018FormatDateString 中会失败,但在 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