Advanced Date Formating
Posted: Sun Jul 28, 2013 2:54 am
Hello,
This is my first source contribution to this forum. It's a different version of the code found here : http://www.purebasic.fr/english/viewtop ... 12&t=45340 Thanks to Mohawk70 for the original source code.
With this advanced date formatting instruction it's possible to format a date like : "%ldd %lmm %dd%eds, %yyyy" --> Saturday July 27th, 2013
It's more an extension to the standard FormatDate(), the extra mask tags are :
Regards
StarBootics
This is my first source contribution to this forum. It's a different version of the code found here : http://www.purebasic.fr/english/viewtop ... 12&t=45340 Thanks to Mohawk70 for the original source code.
With this advanced date formatting instruction it's possible to format a date like : "%ldd %lmm %dd%eds, %yyyy" --> Saturday July 27th, 2013
It's more an extension to the standard FormatDate(), the extra mask tags are :
- %smm : Short month name
%lmm : Long month name
%sdd : Short day name
%ldd : Long day name
%eds : Extra day sign ("st" for first, "nd" for second, "rd" for third, "th" for fourth and so on)
Regards
StarBootics
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Type V4.0.0
; Project name : Advanced Date Formatting
; File name : Advanced Date Formatting.pb
; File Version : 1.0.0
; Programmation : OK
; Programmed by : StarBootics
; E-mail : starbootics@cgocable.ca
; Creation Date : 27-07-2013
; Last update : 27-07-2013
; Coded for : PureBasic 5.20 beta 7
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure DateFormatting
ShortMonth.s[12]
LongMonth.s[12]
ShortDay.s[7]
LongDay.s[7]
ExtraDaySign.s[31]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Macro GetDateFormattingShortMonth(DateFormattingA, ShortMonthID)
DateFormattingA\ShortMonth[ShortMonthID]
EndMacro
Macro GetDateFormattingLongMonth(DateFormattingA, LongMonthID)
DateFormattingA\LongMonth[LongMonthID]
EndMacro
Macro GetDateFormattingShortDay(DateFormattingA, ShortDayID)
DateFormattingA\ShortDay[ShortDayID]
EndMacro
Macro GetDateFormattingLongDay(DateFormattingA, LongDayID)
DateFormattingA\LongDay[LongDayID]
EndMacro
Macro GetDateFormattingExtraDaySign(DateFormattingA, ExtraDaySignID)
DateFormattingA\ExtraDaySign[ExtraDaySignID]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Macro SetDateFormattingShortMonth(DateFormattingA, ShortMonthID, P_ShortMonth)
GetDateFormattingShortMonth(DateFormattingA, ShortMonthID) = P_ShortMonth
EndMacro
Macro SetDateFormattingLongMonth(DateFormattingA, LongMonthID, P_LongMonth)
GetDateFormattingLongMonth(DateFormattingA, LongMonthID) = P_LongMonth
EndMacro
Macro SetDateFormattingShortDay(DateFormattingA, ShortDayID, P_ShortDay)
GetDateFormattingShortDay(DateFormattingA, ShortDayID) = P_ShortDay
EndMacro
Macro SetDateFormattingLongDay(DateFormattingA, LongDayID, P_LongDay)
GetDateFormattingLongDay(DateFormattingA, LongDayID) = P_LongDay
EndMacro
Macro SetDateFormattingExtraDaySign(DateFormattingA, ExtraDaySignID, P_ExtraDaySign)
GetDateFormattingExtraDaySign(DateFormattingA, ExtraDaySignID) = P_ExtraDaySign
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Macro ResetDateFormatting(DateFormattingA)
For ShortMonthID = 0 To 11
SetDateFormattingShortMonth(DateFormattingA, ShortMonthID, "")
SetDateFormattingLongMonth(DateFormattingA, ShortMonthID, "")
Next
For ShortDayID = 0 To 6
SetDateFormattingShortDay(DateFormattingA, ShortDayID, "")
SetDateFormattingLongDay(DateFormattingA, ShortDayID, "")
Next
For ExtraDaySignID = 0 To 30
SetDateFormattingExtraDaySign(DateFormattingA, ExtraDaySignID, "")
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.011 seconds (14090.91 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Initialize operator <<<<<
Procedure InitializeDateFormatting(*DateFormattingA.DateFormatting, Flag.b)
Select Flag
Case 0
SetDateFormattingShortMonth(*DateFormattingA, 00, "Jan")
SetDateFormattingShortMonth(*DateFormattingA, 01, "Feb")
SetDateFormattingShortMonth(*DateFormattingA, 02, "Mar")
SetDateFormattingShortMonth(*DateFormattingA, 03, "Apr")
SetDateFormattingShortMonth(*DateFormattingA, 04, "May")
SetDateFormattingShortMonth(*DateFormattingA, 05, "Jun")
SetDateFormattingShortMonth(*DateFormattingA, 06, "Jul")
SetDateFormattingShortMonth(*DateFormattingA, 07, "Aug")
SetDateFormattingShortMonth(*DateFormattingA, 08, "Sep")
SetDateFormattingShortMonth(*DateFormattingA, 09, "Oct")
SetDateFormattingShortMonth(*DateFormattingA, 10, "Nov")
SetDateFormattingShortMonth(*DateFormattingA, 11, "Dec")
SetDateFormattingLongMonth(*DateFormattingA, 00, "January")
SetDateFormattingLongMonth(*DateFormattingA, 01, "February")
SetDateFormattingLongMonth(*DateFormattingA, 02, "March")
SetDateFormattingLongMonth(*DateFormattingA, 03, "April")
SetDateFormattingLongMonth(*DateFormattingA, 04, "May")
SetDateFormattingLongMonth(*DateFormattingA, 05, "June")
SetDateFormattingLongMonth(*DateFormattingA, 06, "July")
SetDateFormattingLongMonth(*DateFormattingA, 07, "August")
SetDateFormattingLongMonth(*DateFormattingA, 08, "September")
SetDateFormattingLongMonth(*DateFormattingA, 09, "October")
SetDateFormattingLongMonth(*DateFormattingA, 10, "November")
SetDateFormattingLongMonth(*DateFormattingA, 11, "December")
SetDateFormattingShortDay(*DateFormattingA, 00, "Sun")
SetDateFormattingShortDay(*DateFormattingA, 01, "Mon")
SetDateFormattingShortDay(*DateFormattingA, 02, "Tue")
SetDateFormattingShortDay(*DateFormattingA, 03, "Wed")
SetDateFormattingShortDay(*DateFormattingA, 04, "Thu")
SetDateFormattingShortDay(*DateFormattingA, 05, "Fri")
SetDateFormattingShortDay(*DateFormattingA, 06, "Sat")
SetDateFormattingLongDay(*DateFormattingA, 00, "Sunday")
SetDateFormattingLongDay(*DateFormattingA, 01, "Monday")
SetDateFormattingLongDay(*DateFormattingA, 02, "Tuesday")
SetDateFormattingLongDay(*DateFormattingA, 03, "Wednesday")
SetDateFormattingLongDay(*DateFormattingA, 04, "Thursday")
SetDateFormattingLongDay(*DateFormattingA, 05, "Friday")
SetDateFormattingLongDay(*DateFormattingA, 06, "Saturday")
For ExtraDaySignID = 1 To 31
Select ExtraDaySignID
Case 1, 21, 31
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "st")
Case 2, 22
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "nd")
Case 3, 23
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "rd")
Default
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "th")
EndSelect
Next
Case 1
SetDateFormattingShortMonth(*DateFormattingA, 00, "Jan")
SetDateFormattingShortMonth(*DateFormattingA, 01, "Fév")
SetDateFormattingShortMonth(*DateFormattingA, 02, "Mar")
SetDateFormattingShortMonth(*DateFormattingA, 03, "Avr")
SetDateFormattingShortMonth(*DateFormattingA, 04, "Mai")
SetDateFormattingShortMonth(*DateFormattingA, 05, "Jun")
SetDateFormattingShortMonth(*DateFormattingA, 06, "Jul")
SetDateFormattingShortMonth(*DateFormattingA, 07, "Aoû")
SetDateFormattingShortMonth(*DateFormattingA, 08, "Sep")
SetDateFormattingShortMonth(*DateFormattingA, 09, "Oct")
SetDateFormattingShortMonth(*DateFormattingA, 10, "Nov")
SetDateFormattingShortMonth(*DateFormattingA, 11, "Déc")
SetDateFormattingLongMonth(*DateFormattingA, 00, "Janvier")
SetDateFormattingLongMonth(*DateFormattingA, 01, "Février")
SetDateFormattingLongMonth(*DateFormattingA, 02, "Mars")
SetDateFormattingLongMonth(*DateFormattingA, 03, "Avril")
SetDateFormattingLongMonth(*DateFormattingA, 04, "Mai")
SetDateFormattingLongMonth(*DateFormattingA, 05, "Juin")
SetDateFormattingLongMonth(*DateFormattingA, 06, "Juillet")
SetDateFormattingLongMonth(*DateFormattingA, 07, "Août")
SetDateFormattingLongMonth(*DateFormattingA, 08, "Septembre")
SetDateFormattingLongMonth(*DateFormattingA, 09, "Octobre")
SetDateFormattingLongMonth(*DateFormattingA, 10, "Novembre")
SetDateFormattingLongMonth(*DateFormattingA, 11, "Décembre")
SetDateFormattingShortDay(*DateFormattingA, 00, "Dim")
SetDateFormattingShortDay(*DateFormattingA, 01, "Lun")
SetDateFormattingShortDay(*DateFormattingA, 02, "Mar")
SetDateFormattingShortDay(*DateFormattingA, 03, "Mer")
SetDateFormattingShortDay(*DateFormattingA, 04, "Jeu")
SetDateFormattingShortDay(*DateFormattingA, 05, "Ven")
SetDateFormattingShortDay(*DateFormattingA, 06, "Sam")
SetDateFormattingLongDay(*DateFormattingA, 00, "Dimanche")
SetDateFormattingLongDay(*DateFormattingA, 01, "Lundi")
SetDateFormattingLongDay(*DateFormattingA, 02, "Mardi")
SetDateFormattingLongDay(*DateFormattingA, 03, "Mercredi")
SetDateFormattingLongDay(*DateFormattingA, 04, "Jeudi")
SetDateFormattingLongDay(*DateFormattingA, 05, "Vendredi")
SetDateFormattingLongDay(*DateFormattingA, 06, "Samedi")
For ExtraDaySignID = 1 To 31
Select ExtraDaySignID
Case 1
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "er")
Default
SetDateFormattingExtraDaySign(*DateFormattingA, ExtraDaySignID-1, "")
EndSelect
Next
EndSelect
EndProcedure
Procedure.s FormatDateEx(*DateFormattingA.DateFormatting, Mask.s, Date.i)
FormattedDate.s = FormatDate(Mask, Date)
If FindString(FormattedDate, "%smm", 1)
FormattedDate = ReplaceString(FormattedDate, "%smm", GetDateFormattingShortMonth(*DateFormattingA, Month(Date) - 1), #PB_String_NoCase, 1)
EndIf
If FindString(FormattedDate, "%lmm", 1)
FormattedDate = ReplaceString(FormattedDate, "%lmm", GetDateFormattingLongMonth(*DateFormattingA, Month(Date) - 1), #PB_String_NoCase, 1)
EndIf
If FindString(FormattedDate, "%sdd", 1)
FormattedDate = ReplaceString(FormattedDate, "%sdd", GetDateFormattingShortDay(*DateFormattingA, DayOfWeek(Date)), #PB_String_NoCase, 1)
EndIf
If FindString(FormattedDate, "%ldd", 1)
FormattedDate = ReplaceString(FormattedDate, "%ldd", GetDateFormattingLongDay(*DateFormattingA, DayOfWeek(Date)), #PB_String_NoCase, 1)
EndIf
If FindString(FormattedDate, "%eds", 1)
FormattedDate = ReplaceString(FormattedDate, "%eds", GetDateFormattingExtraDaySign(*DateFormattingA, Day(Date)-1), #PB_String_NoCase, 1)
EndIf
ProcedureReturn FormattedDate
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Macro AddElementEx(ListName, Element)
AddElement(ListName)
ListName = Element
EndMacro
NewList DateMask.s()
AddElementEx(DateMask(), "A=%yyyy, M=%mm, J=%dd")
AddElementEx(DateMask(), "%yyyy-%mm-%dd")
AddElementEx(DateMask(), "%dd-%mm-%yyyy")
AddElementEx(DateMask(), "%dd %lmm %yyyy")
AddElementEx(DateMask(), "%dd %smm %yyyy")
AddElementEx(DateMask(), "%ldd %lmm %dd%eds, %yyyy")
AddElementEx(DateMask(), "%dd-%mm-%yyyy - %hh:%ii:%ss")
AddElementEx(DateMask(), "%ldd - %dd %lmm %yyyy")
AddElementEx(DateMask(), "%lmm %dd%eds, %yyyy")
AddElementEx(DateMask(), "%dd%eds %lmm %yyyy")
AddElementEx(DateMask(), "%dd%eds %lmm %yyyy - %hh:%ii:%ss")
AddElementEx(DateMask(), "%dd %lmm %yyyy - %dd-%mm-%yyyy")
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Testing with the English setting"
Debug ""
InitializeDateFormatting(DateFormatting.DateFormatting, 0)
ForEach DateMask()
Debug FormatDateEx(DateFormatting, DateMask(), Date())
Next
Debug ""
For DayID = 1 To 31
Debug FormatDateEx(DateFormatting, "%lmm %dd%eds, %yyyy", Date(2014, 01, DayID, 0, 0, 0))
Next
Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Testing with the French setting"
Debug ""
InitializeDateFormatting(DateFormatting, 1)
ForEach DateMask()
Debug FormatDateEx(DateFormatting, DateMask(), Date())
Next
Debug ""
For DayID = 1 To 31
Debug FormatDateEx(DateFormatting, "%dd%eds %lmm %yyyy", Date(2014, 01, DayID, 0, 0, 0))
Next
ResetDateFormatting(DateFormatting)
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<