Автоформат Дата переформатировать - PullRequest
0 голосов
/ 08 марта 2019

У меня есть переменная, которая содержит строку, представляющую дату.

$d = "March 17,2019"

На самом деле, мой код не устанавливает значение d таким образом, но для аргументов предположим, что d содержит строковую дату в указанном формате.

Есть ли простой способ изменить строку d $ на следующий формат: мм / дд / гг?

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Еще один базовый код для вашей справки

$d1 = "March 17,2019"
$year=StringRight($d1,2) ; if you want like 2019 use StringRight($d1,4)
$rightstr = StringLeft($d1,(StringLen($d1)-5))
$test = StringSplit($rightstr, " ")
$mon = $test[1]
$day = $test[2]
Local $mon1
Local $aMMM[12] = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
for $i =0 to 11
    if $mon = $aMMM[$i] Then
        $mon1 = $i+1
    EndIf
Next
$mon1= StringFormat("%02d", $mon1)
$finaldate = $day&"/"&$mon1&"/"&$year
MsgBox(1,"",$finaldate)
1 голос
/ 08 марта 2019
$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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...