$d = "March 17,2019"
$sFormattedDate = _MyDate($d)
If Not @error Then
MsgBox(0, @ScriptName, $sFormattedDate)
EndIf
Func _MyDate($sDate, $iYearLen = 4)
; Get month, day and year from a string (3 = return array of global matches).
$aDate = StringRegExp($sDate, '(\w+)\s+(\d{1,2}),(\d{4})', 3)
If UBound($aDate) = 3 Then
; Create an array of months.
$aMonths = StringSplit('January|February|March|April|May|June|July|August|September|October|November|December', '|')
; Match month and return in mm/dd/yy format.
For $i1 = 1 To UBound($aMonths) -1
If $aDate[0] = $aMonths[$i1] Then
If $iYearLen <> 4 Then
$aDate[2] = StringRight($aDate[2], $iYearLen)
EndIf
Return StringFormat('%02d/%02d/%d', $i1, $aDate[1], $aDate[2])
EndIf
Next
EndIf
; Return error 1 if month is not matched.
Return SetError(1, 0, '')
EndFunc
Использует регулярное выражение для получения месяца, дня и года из строки даты.Если месяц сопоставляется с массивом месяцев, тогда индекс массива месяца используется вместо StringFormat .Это вернет 03/17/2019
из March 17,2019
в примере кода.Если _MyDate()
терпит неудачу, @error
устанавливается в значение 1
.
StringFormat использует %02d/%02d/%d
в каждом сегменте даты, что вызывает заполнение нулями 2 цифры в месяци день.Если заполнение нулями не требуется, удалите 02
между %
и d
.
Если вы хотите, чтобы год состоял только из 2 цифр, тогда используйте 2
в качестве второго параметра _MyDate()
.
Например,
$sFormattedDate = _MyDate($d, 2)
Шаблон в StringRegExp использует:
\w
, чтобы соответствовать символу слова. \d
для сопоставления с цифрой. \s
для сопоставления с пробелом.
Скобки используются для получения 3 сегментов из строки даты.
Если вы хотите сохранить месяц как есть, и просто замените пробел и запятую на /
.
$d = "March 17,2019"
$sFormattedDate = StringRegExpReplace($d, '[\s,]', '/')
MsgBox(0, @ScriptName, $sFormattedDate)