У мене є шматок коду AppleScript, який перетворює числову дату на цю дату словами.
Код приймає змінну, що містить дату в такому форматі:
2017_04_01
Код перетворює дану числову дату у наступний формат:
Субота, 1 квітня 2017 року
Мій код був змінений від відповіді, наданої користувачеві на це запитання markhunte :
Маніпуляція датою Applescript для отримання декількох форматів
Мій код працює відмінно, коли дано сьогоднішню дату 2017_04_01
. Але, з якоїсь причини, вона не працює, коли їй дається дата 31 дня будь-якого даного місяця.
Наприклад, мій код не буде працювати, якщо theNumericalDate
є 2017_03_31
.
Ось мій код AppleScript:
set theNumericalDate to "2017_04_01"
-- Remove the underscores:
set temp to AppleScript's text item delimiters
set AppleScript's text item delimiters to {"_"}
set listOfTheNumbersOfDate to text items of theNumericalDate
set AppleScript's text item delimiters to temp
-- Separate each individual element:
set onlyTheYear to (item 1 of (listOfTheNumbersOfDate))
set onlyTheMonth to (item 2 of (listOfTheNumbersOfDate))
set onlyTheDay to (item 3 of (listOfTheNumbersOfDate))
-- I don't want to display "March 03" as the date. I would prefer: "March 3". So, remove the first character from the day if it is a zero:
if (character 1 of onlyTheDay is "0") then
set onlyTheDay to text 2 thru -1 of onlyTheDay
end if
set stringForShellScript to " date -v" & onlyTheDay & "d -v" & onlyTheMonth & "m -v" & onlyTheYear & "y +%"
set theMonthAsWord to (do shell script (stringForShellScript & "B"))
set theDayAsWord to (do shell script (stringForShellScript & "A"))
set theDisplayDateString to (theDayAsWord & ", " & theMonthAsWord & " " & onlyTheDay & ", " & onlyTheYear)
Виходячи з деякої налагодження, яку я зробив, я вважаю, що джерело проблеми полягає в цьому рядку:
set theMonthAsWord to (do shell script (stringForShellScript & "B"))
Чи можна визначити та вирішити проблему?
Я розумію, що я можу легко виконати бажаний ефект визначення імені місяця, реалізуючи його if statement
як от:
if onlyTheMonth is "01" then
set theMonthAsWord to "January"
else if onlyTheMonth is "02" then
set theMonthAsWord to "February"
else if onlyTheMonth is "03" then
set theMonthAsWord to "March"
...
Я відхилявся від цього методу, тому що він тривалий і непростий.
Крім того, мені все одно доведеться якось розібратися в день тижня, який є більш складним і не може бути виконаний простою if statement
. Таким чином, лінія:
set theDayAsWord to (do shell script (stringForShellScript & "A"))
все одно припинить мій код, коли theNumericalDate
закінчується _31
.