Ho un pezzo di codice AppleScript che converte una data numerica in quella data in parole.
Il codice accetta una variabile che contiene una data nel seguente formato:
2017_04_01
Il codice converte questa data numerica nel seguente formato basato su parole:
Saturday, April 1, 2017
Il mio codice è stato modificato dalla risposta fornita a questa domanda, dall'utente markhunte :
Manipolazione delle date di Applescript per ottenere più formati
Il mio codice funziona perfettamente quando viene indicata la data odierna di 2017_04_01
. Ma, per qualche ragione, non funziona quando viene data la data del giorno 31 di un dato mese.
Ad esempio, il mio codice non funzionerà se theNumericalDate
è 2017_03_31
.
Ecco il mio codice 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)
Sulla base di alcuni debug che ho fatto, penso che la fonte del problema si trovi in questa linea:
set theMonthAsWord to (do shell script (stringForShellScript & "B"))
Puoi identificare e risolvere il problema?
Mi rendo conto che posso facilmente ottenere l'effetto desiderato di determinare il nome del mese implementando un if statement
come:
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"
...
Ho evitato questo metodo perché è lungo e poco sofisticato.
Inoltre, dovrei ancora capire in qualche modo il giorno della settimana, che è più complicato e non può essere realizzato con un semplice if statement
. Quindi, la linea:
set theDayAsWord to (do shell script (stringForShellScript & "A"))
terminerebbe ancora il mio codice quando theNumericalDate
termina in _31
.