For macOS ...
Code: Select all
;-TOP
; ----
;- MacOS Date funtions
; Mask:
; Year = yyyy
; Month = MM (1..12), MMM (Short Name), MMMM (Long Name)
; Day = dd
; Hour = HH (0..23), hh (0..11); a = period (AM, PM)
; Minute = mm
; Second = ss
;
; Day ot the year = DDD (1..3)
; Week of Year = ww
; Week of Month = W
Macro CocoaString(NSString)
PeekS(CocoaMessage(0, NSString, "UTF8String"), -1, #PB_UTF8)
EndMacro
Procedure.s GetStringFromDate(Date, Mask.s = "yyyy-MM-dd")
Protected NSPool, NSDateFormatter, NSString
Protected r1.s
NSPool = CocoaMessage(0, 0, "NSAutoreleasePool new")
NSDateFormatter = CocoaMessage(0, 0, "NSDateFormatter new")
; Convert PB date format
If FindString(Mask, "%")
mask = LCase(mask)
mask = ReplaceString(mask, "m", "M")
mask = ReplaceString(mask, "i", "m")
mask = ReplaceString(mask, "h", "H")
mask = RemoveString(mask, "%")
EndIf
If Date = 0
Date = CocoaMessage(0, 0, "NSDate date")
EndIf
CocoaMessage(0, NSDateFormatter, "setDateFormat:$", @Mask)
NSString = CocoaMessage(0, NSDateFormatter, "stringFromDate:@", @Date)
r1 = CocoaString(NSString)
CocoaMessage(0, NSDateFormatter, "release")
CocoaMessage(0, NSPool, "release")
ProcedureReturn r1
EndProcedure
Procedure GetDateFromString(Date.s = "now", Mask.s = "yyyy-MM-dd")
Protected NSPool, NSDate, NSDateFormatter
Protected r1
NSPool = CocoaMessage(0, 0, "NSAutoreleasePool new")
NSDateFormatter = CocoaMessage(0, 0, "NSDateFormatter new")
If date = "now"
r1 = CocoaMessage(0, 0, "NSDate now")
Else
; Convert PB date format
If FindString(Mask, "%")
mask = LCase(mask)
mask = ReplaceString(mask, "m", "M")
mask = ReplaceString(mask, "i", "m")
mask = ReplaceString(mask, "h", "H")
mask = RemoveString(mask, "%")
EndIf
CocoaMessage(0, NSDateFormatter, "setDateFormat:$", @Mask)
r1 = CocoaMessage(0, NSDateFormatter, "dateFromString:$", @Date)
EndIf
CocoaMessage(0, NSDateFormatter, "release")
CocoaMessage(0, NSPool, "release")
ProcedureReturn r1
EndProcedure
; ----
Define diff.d
Define date1 = GetDateFromString()
Define date2 = GetDateFromString("1965-08-20 15:30:00", "%YYYY-%MM-%DD %HH:%II:%SS")
;Define date2 = CocoaMessage(0, 0, "NSDate dateWithString:$", @"1965-08-20 14:30:00 +0000")
Debug GetStringFromDate(date1, "%YYYY-%MM-%DD %hh:%II:%SS")
Debug GetStringFromDate(date2, "%YYYY-%MM-%DD %hh:%II:%SS")
r1 = CocoaMessage(@diff, date1, "timeIntervalSinceDate:", date2)
Debug "I am " + StrD(diff / 86400.0, 2) + " days old"