Tengo un fragmento de código AppleScript que convierte una fecha numérica en esa fecha en palabras.
El código acepta una variable que contiene una fecha en el siguiente formato:
2017_04_01
El código convierte esta fecha numérica al siguiente formato basado en palabras:
Sábado, 1 de abril de 2017
El usuario markhunte ha modificado mi código de la respuesta proporcionada a esta pregunta:
Manipulación de la fecha de AppleScript para obtener múltiples formatos
Mi código funciona perfectamente cuando se le da la fecha de hoy de 2017_04_01
. Pero, por alguna razón, no funciona cuando se le da la fecha del día 31 de un mes determinado.
Por ejemplo, mi código no funcionará si theNumericalDate
es 2017_03_31
.
Aquí está mi código 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)
Sobre la base de la depuración que he hecho, creo que la fuente del problema se encuentra en esta línea:
set theMonthAsWord to (do shell script (stringForShellScript & "B"))
¿Puedes identificar y resolver el problema?
Me doy cuenta de que puedo lograr fácilmente el efecto deseado al determinar el nombre del mes implementando un if statement
como:
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"
...
Me alejé de este método porque es largo y poco sofisticado.
Además, todavía tengo que averiguar el día de la semana de alguna manera, lo que es más complicado y no se puede lograr con un simple if statement
. Así, la línea:
set theDayAsWord to (do shell script (stringForShellScript & "A"))
aún terminaría mi código cuando theNumericalDate
termina en _31
.