2

I work with three date format,

1.04/18/2015 (PS my system date is not the same but DD/MM/YY)

2.June 2nd, 2012 but converted to the 1st format by code bellow

3.Saturday 24 March 2018 (current date)

I just created the script bellow to convert both date in the same format:

set creationDate to "March 23rd, 2018"
set CreationDay to ""
set Creationmonth to ""
set Creationyear to ""


if creationDate contains "1st" then
    set CreationDay to "1"
end if
if creationDate contains "2nd" then
    set CreationDay to "2"
end if
if creationDate contains "3rd" then
    set CreationDay to "3"
end if
if creationDate contains "4th" then
    set CreationDay to "4"
end if
if creationDate contains "5th" then
    set CreationDay to "5"
end if
if creationDate contains "6th" then
    set CreationDay to "6"
end if
if creationDate contains "7th" then
    set CreationDay to "7"
end if
if creationDate contains "8th" then
    set CreationDay to "8"
end if
if creationDate contains "9th" then
    set CreationDay to "9"
end if
if creationDate contains "10th" then
    set CreationDay to "10"
end if
if creationDate contains "11th" then
    set CreationDay to "11"
end if
if creationDate contains "12th" then
    set CreationDay to "12"
end if
if creationDate contains "13th" then
    set CreationDay to "13"
end if
if creationDate contains "14th" then
    set CreationDay to "14"
end if
if creationDate contains "15th" then
    set CreationDay to "15"
end if
if creationDate contains "16th" then
    set CreationDay to "16"
end if
if creationDate contains "17th" then
    set CreationDay to "17"
end if
if creationDate contains "18th" then
    set CreationDay to "18"
end if
if creationDate contains "19th" then
    set CreationDay to "19"
end if
if creationDate contains "20th" then
    set CreationDay to "20"
end if
if creationDate contains "21st" then
    set CreationDay to "21"
end if
if creationDate contains "22nd" then
    set CreationDay to "22"
end if
if creationDate contains "23rd" then
    set CreationDay to "23"
end if
if creationDate contains "24th" then
    set CreationDay to "24"
end if
if creationDate contains "25th" then
    set CreationDay to "25"
end if
if creationDate contains "26th" then
    set CreationDay to "26"
end if
if creationDate contains "27th" then
    set CreationDay to "27"
end if
if creationDate contains "28th" then
    set CreationDay to "28"
end if
if creationDate contains "29th" then
    set CreationDay to "29"
end if
if creationDate contains "30th" then
    set CreationDay to "30"
end if
if creationDate contains "31st" then
    set CreationDay to "31"
end if

if creationDate contains "2018" then
    set Creationyear to "2018"
end if
if creationDate contains "2017" then
    set Creationyear to "2017"
end if
if creationDate contains "2016" then
    set Creationyear to "2016"
end if
if creationDate contains "2015" then
    set Creationyear to "2015"
end if
if creationDate contains "2014" then
    set Creationyear to "2014"
end if
if creationDate contains "2013" then
    set Creationyear to "2013"
end if
if creationDate contains "2012" then
    set Creationyear to "2012"
end if
if creationDate contains "2011" then
    set Creationyear to "2011"
end if
if creationDate contains "2010" then
    set Creationyear to "2010"
end if
if creationDate contains "2009" then
    set Creationyear to "2009"
end if
if creationDate contains "2008" then
    set Creationyear to "2008"
end if
if creationDate contains "2007" then
    set Creationyear to "2007"
end if
if creationDate contains "2006" then
    set Creationyear to "2006"
end if
if creationDate contains "2005" then
    set Creationyear to "2005"
end if
if creationDate contains "2004" then
    set Creationyear to "2004"
end if
if creationDate contains "2003" then
    set Creationyear to "2003"
end if


if creationDate contains "January" then
    set Creationmonth to "01"
end if
if creationDate contains "February" then
    set Creationmonth to "02"
end if
if creationDate contains "March" then
    set Creationmonth to "03"
end if
if creationDate contains "April" then
    set Creationmonth to "04"
end if
if creationDate contains "May" then
    set Creationmonth to "05"
end if
if creationDate contains "June" then
    set Creationmonth to "06"
end if
if creationDate contains "July" then
    set Creationmonth to "07"
end if
if creationDate contains "Agust" then
    set Creationmonth to "08"
end if
if creationDate contains "September" then
    set Creationmonth to "09"
end if
if creationDate contains "October" then
    set Creationmonth to "10"
end if
if creationDate contains "November" then
    set Creationmonth to "11"
end if
if creationDate contains "December" then
    set Creationmonth to "12"
end if


set CreationfinalDate to CreationDay & "/" & Creationmonth & "/" & Creationyear
return CreationfinalDate

Question 1: How can I convert date number 3 (which is the current date) to the same format

(I know how to return as a string but not otherwise)

set myDate to date string of (current date)

Question 2: can I create a script to tell me if the difference between date 2 and date 3 are within 60 days or outside 60 days?

2 Answers 2

7

Question 1: Rather than going through the trouble of obtaining the current date only to convert it to another format, you can obtain it in the right format straight away with a bash command:

    do shell script "date +'%m/%d/%Y'"
        --> 03/24/2018

Question 2: First, reformat the date into that which your system can recognise. In your case (and mine), it's dd/mm/yyyy:

    set [M, ordinal, Y] to the words of "June 2nd, 2012"

    set the text item delimiters to {"st", "nd", "rd", "th"}
    set cardinal to (first text item of ordinal) --> "2"
    set cardinal to text -1 thru -2 of ("0" & cardinal) --> "02"

    set the text item delimiters to space
    set date_string to {M, cardinal, Y} as text

    -- date -j -f '%B %d %Y' 'June 02 2012' +'%d/%m/%Y'
    set command to {¬
        "date -j -f '%B %d %Y'", ¬
        quoted form of the date_string, ¬
        "+'%d/%m/%Y'"}

    do shell script (command as text) --> "02/06/2012"

Then subtract one date from the current date, and divide by days to get the number of days between the two dates:

    ((current date) - (date result)) / days
        --> 2121.627

PS. You can use that same shell command to convert the date into your first format, mm/dd/yyyy, simply by switching %d and %m at the end of the command string.


ADDENDUM:

I thought I'd also show you how to convert the third date string into your desired format using pure AppleScript. It can be done rather quite elegantly, actually:

    set today to "Saturday 24 March 2018"

    set [_day, _month, _year] to [day, month, year] of date today
        --> {24, March, 2018}

    set _month to _month * 1 --> 3
    set _month to text -1 thru -2 of ("0" & _month) --> "03"

    set the text item delimiters to "/"
    return {_month, _day, _year} as string
        --> "03/24/2018"

Note to other users: The code in this addendum may or may not work for you, depending on your system settings. AppleScript is notoriously fussy about what it will and will not recognise as a date string. The OP and I appear to have similar or identical Language & Region date settings, which allows the variable today to be interpreted correctly as a date by AppleScript, whilst the same code running on a different system would throw an error.

To adapt the code here for use on your own system, first run the command get date string of (current date) to get a preview of the date format used by your system, then change the variable declaration for today to match. Alternatively, set the variable today to the date string of (current date).

1
  • 1
    The info I was looking for was not to be found in this thread, but I had to point out what a tidy thing of beauty set _month to text -1 thru -2 of ("0" & _month) is. Took me a moment to appreciate its cleverness fully. Huzzah.
    – dashard
    Commented Aug 4, 2021 at 18:39
0

Coerce your date into an AppleScript date object, then you can perform calculation such as set myNewDate to myDate + (2 * days). For more date calculations, see Date-/Time-Calculations using AppleScript and AppleScript Language Guide - Date.

Below is an alternative approach to parsing the third, more verbose, date format. This approach uses sub-routines to split and trim the input. It is not complete but hopefully useful:

set myDate to "March 1st, 2018"
set myComponents to my split(myDate, " ")

set myDay to second item of myComponents
set myDay to trim(",rdsth", myDay) as integer

set myMonth to first item of myComponents
set myYear to last item of myComponents as integer

-- ...myDay, myMonth, and myYear are usable

-- http://erikslab.com/2007/08/31/applescript-how-to-split-a-string/
on split(theString, theDelimiter)
    -- save delimiters to restore old settings
    set oldDelimiters to AppleScript's text item delimiters
    -- set delimiters to delimiter to be used
    set AppleScript's text item delimiters to theDelimiter
    -- create the array
    set theArray to every text item of theString
    -- restore the old setting
    set AppleScript's text item delimiters to oldDelimiters
    -- return the result
    return theArray
end split

-- https://macscripter.net/viewtopic.php?id=18519
on trim(theseCharacters, someText)
    -- Lazy default (AppleScript doesn't support default values)
    if theseCharacters is true then set theseCharacters to ¬
        {" ", tab, ASCII character 10, return, ASCII character 0}

    repeat until first character of someText is not in theseCharacters
        set someText to text 2 thru -1 of someText
    end repeat

    repeat until last character of someText is not in theseCharacters
        set someText to text 1 thru -2 of someText
    end repeat

    return someText
end trim
1
  • That work too but this make more sense I suppose, however set myFinalDae to myMonth & "/" & myDay & "/" & myYear return "March/1/2018" I have a better look in a sec
    – Kevin
    Commented Mar 24, 2018 at 14:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .