Ftime

Testing the MarkupExpression ftime

Testing the MarkupExpression ftime

Today is 2025-02-07 Fri in PmWikiland where its is 01:16:56

 {(ftime %F -7days)}
 {(ftime %F when="2007-08-14 -1days")}
 {(ftime %F when="2007-08-14 -1 days")}
 {(ftime %F when="2007-08-14 -1 day")}
 {(ftime %F "2007-04-11 -4 days")}

 {(ftime %F when="2007-01-24 +1 day")}
 {(ftime %F when="2007-01-24 +1day")}
 {(ftime %F "+1 day")} ?today +1 use quotes
 {(ftime %F +1day)} ?today +1
 2025-01-31
 2007-08-13
 2007-08-13
 2007-08-13
 2007-04-07

 2007-01-25
 2007-01-25
 2025-02-08 ?today +1 use quotes
 2025-02-08 ?today +1
 {(ftime when=" ")}
 {(ftime %s)}
 {(ftime %s " ")}
 {(ftime %s when="")}
 {(ftime fmt=%F when="2007-08-14 -1days")}
 December 31, 1969, at 11:59 PM
 1738891016
 -1
 -1
 2007-08-13
 {(ftime News-20070501)}
 May 01, 2007, at 12:00 AM
 {(ftime MarchingOrders2007)}
 February 07, 2025, at 01:16 AM
 {(ftime 1177600111)}
 February 07, 2025, at 01:16 AM
 {(ftime %s)}
 1738891016
 {(ftime @1177600111)}
 April 26, 2007, at 03:08 PM
 {(ftime fmt="%b %#d %Y" when="second mon of Jan")}
 {(ftime fmt="%b %#d %Y" when="second tue of Feb")}
 {(ftime fmt="%b %#d %Y" when="second wed of Mar")}
 {(ftime fmt="%b %e %Y" when="second thu of Apr")}
 {(ftime fmt="%b %e %Y" when="second fri of May")}
 {(ftime fmt="%b %e %Y" when="second sat of Jun")}
 {(ftime fmt="%b %e %Y" when="third  sun of Jul")}
 {(ftime fmt="%b %e %Y" when="fourth mon of Aug")}
 {(ftime fmt="%b %e %Y" when="first  tue of Sep")}
 {(ftime fmt="%b %e %Y" when="second wed of Oct")}
 {(ftime fmt="%b %e %Y" when="third  thu of Nov")}
 {(ftime fmt="%b %e %Y" when="first  wed of Dec")}
----
 {(ftime fmt="%b %e %Y" when="second Monday of January")}
 {(ftime fmt="%b %e %Y" when="second Tuesday of February")}
...
 {(ftime fmt="%b %e %Y" when="first Wednesday of December")}
 Jan 13 2025
 Feb 11 2025
 Mar 12 2025
 Apr 10 2025
 May  9 2025
 Jun 14 2025
 Jul 20 2025
 Aug 25 2025
 Sep  2 2025
 Oct  8 2025
 Nov 20 2025
 Dec  3 2025

 Jan 13 2025
 Feb 11 2025

...

 Dec  3 2025

All these work on my own server, with or without the changes in DRange() for 2.2.69. --Petko October 19, 2014, at 06:12 AM

Testing relative GNU date input formats

Today is 2025-02-07 Fri

? marks an unsatisfactory result
 {(ftime "%Y %b %d %a" "1 mon")}
 {(ftime "%Y %b %d %a" "2 tue")}
 {(ftime "%Y %b %d %a" "3 wed")}
 {(ftime "%Y %b %d %a" "4 thu")} ?

 {(ftime "%Y %b %d %a" "1 sat")}
 {(ftime "%Y %b %d %a" "2 sat")}
 {(ftime "%Y %b %d %a" "3 sat")}
 {(ftime "%Y %b %d %a" "4 sat")} 

 {(ftime "%Y %b %d %a" "tuesday")}
 {(ftime "%Y %b %d %a" "last tue")}
 {(ftime "%Y %b %d %a" "this tue")}
 {(ftime "%Y %b %d %a" "next tue")} ?
 {(ftime "%Y %b %d %a" "thursday")}

 {(ftime "%Y %b %d %a" "last week")}
 {(ftime "%Y %b %d %a" "this week")}
 {(ftime "%Y %b %d %a" "next week")}
 2025 Feb 10 Mon
 2025 Feb 18 Tue
 2025 Feb 26 Wed
 2025 Mar 06 Thu ?

 2025 Feb 08 Sat
 2025 Feb 15 Sat
 2025 Feb 22 Sat
 2025 Mar 01 Sat 

 2025 Feb 11 Tue
 2025 Feb 04 Tue
 2025 Feb 11 Tue
 2025 Feb 11 Tue ?
 2025 Feb 13 Thu

 2025 Jan 27 Mon
 2025 Feb 03 Mon
 2025 Feb 10 Mon

All the above are correct; "4 thu" means "Thursday the fourth week", knowing that "next Thursday" is "this Thursday" or "Thursday the first week". --Petko

 {(ftime "%Y %b %d %a" "last month")} ?
 {(ftime "%Y %b %d %a" "this month")}
 {(ftime "%Y %b %d %a" "next month")}

 {(ftime "%Y %b %d %a" "June")} ?
 {(ftime "%Y %b %d %a" "last June")} ?
 {(ftime "%Y %b %d %a" "this June")} ?
 {(ftime "%Y %b %d %a" "next June")} ?
 {(ftime "%Y %b %d %a" "last Aug")} ?
 {(ftime "%Y %b %d %a" "this Aug")} ?
 {(ftime "%Y %b %d %a" "next Aug")} ?
 {(ftime "%Y %b %d %a" "October")} ?
 {(ftime "%Y %b %d %a" "last Oct")} ?
 {(ftime "%Y %b %d %a" "this Oct")} ?
 {(ftime "%Y %b %d %a" "next Oct")} ?

 {(ftime "%Y %b %d %a" "last year")}
 {(ftime "%Y %b %d %a" "this year")}
 {(ftime "%Y %b %d %a" "next year")}
 2025 Jan 07 Tue ?
 2025 Feb 07 Fri
 2025 Mar 07 Fri

 2025 Jun 07 Sat ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Oct 07 Tue ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?

 2024 Feb 07 Wed
 2025 Feb 07 Fri
 2026 Feb 07 Sat
 {(ftime "%Y %b %d %a" "3 wed")}
 {(ftime "%Y %b %d %a" "wed 3")} ?
 {(ftime "%Y %b %d %a" "3 wed aug")} ?
 {(ftime "%Y %b %d %a" "aug 3 wed")} ?
 {(ftime "%Y %b %d %a" "aug wed 3")} ?

 {(ftime "%Y %b %d %a" "3 wed this aug")} ?
 {(ftime "%Y %b %d %a" "this aug 3 wed")} ?
 {(ftime "%Y %b %d %a" "3 wed aug this year")} ?
 {(ftime "%Y %b %d %a" "aug this year 3 wed")} ?
 {(ftime "%Y %b %d %a" "this year aug 3 wed")} ?
 {(ftime "%Y %b %d %a" "this year aug wed 3")} ?
 2025 Feb 26 Wed
 2025 Feb 07 Fri ?
 2025 Aug 27 Wed ?
 2025 Aug 06 Wed ?
 2025 Feb 07 Fri ?

 2025 Feb 07 Fri ?
 2025 Feb 07 Fri ?
 2025 Aug 27 Wed ?
 2025 Aug 27 Wed ?
 2025 Aug 06 Wed ?
 2025 Feb 07 Fri ?

If something is unsatisfactory with relative dates, the reason is the strtotime function in PHP, not PmWiki which uses the date this function recognizes and returns. See also Relative formats on which relative dates are recognized, for example "this/last/next Aug" is not among the ones that are expected to be recognized. --Petko October 19, 2014, at 06:08 AM

added Version 2.3.0 (2022-01-15)
 {(ftime %o)}
 {(ftime "%o")}
 {(ftime "%Y %b %d%o %a")}
 th
 th
 2025 Feb 07th Fri
added Version 2.3.12 (2022-09-25)
 {(ftime "%L")}
 {(ftime "%L" "-4minutes")}
 {(ftime "%L" "-4hours")}
 {(ftime "%L" "-4days")}
 {(ftime "%L" "-4months")}
 {(ftime "%L" "-4years")}
 {(ftime "%L" "2022-09-25")}

 {(ftime "%L" "-9months")}
 {(ftime "%L" "-10months")}
 {(ftime "%L" "-11months")}
 {(ftime "%L" "-12months")}

A stamp in the future is unexpected,\\
we should handle it better:
 {(ftime "%L" "+6days")}
 {(ftime "%L" "+6months")} (±DST)
 
 
 
 
 
 
 

 
 
 
 

A stamp in the future is unexpected,
we should handle it better:

 
  (±DST)
 0: 00.00 00.00 config start
 1: 00.01 00.01 config end
 2: 00.21 00.20 MarkupToHTML begin
 3: 00.21 00.20 MarkupToHTML begin
 4: 00.21 00.21 MarkupToHTML end
 5: 00.21 00.21 MarkupToHTML begin
 6: 00.22 00.21 MarkupToHTML end
 7: 00.22 00.21 MarkupToHTML begin
 8: 00.22 00.21 MarkupToHTML end
 9: 00.22 00.21 MarkupToHTML begin
10: 00.22 00.21 MarkupToHTML end
11: 00.22 00.21 MarkupToHTML begin
12: 00.22 00.21 MarkupToHTML end
13: 00.22 00.21 MarkupToHTML begin
14: 00.22 00.21 MarkupToHTML end
15: 00.22 00.21 MarkupToHTML begin
16: 00.22 00.21 MarkupToHTML end
17: 00.22 00.21 MarkupToHTML begin
18: 00.22 00.22 MarkupToHTML end
19: 00.22 00.22 MarkupToHTML begin
20: 00.23 00.22 MarkupToHTML end
21: 00.23 00.22 MarkupToHTML begin
22: 00.23 00.23 MarkupToHTML end
23: 00.23 00.23 MarkupToHTML begin
24: 00.24 00.23 MarkupToHTML end
25: 00.24 00.23 MarkupToHTML begin
26: 00.24 00.23 MarkupToHTML end
27: 00.24 00.23 MarkupToHTML begin
28: 00.24 00.24 MarkupToHTML end
29: 00.25 00.24 ReadApprovedUrls SiteAdmin.ApprovedUrls begin
30: 00.25 00.25 ReadApprovedUrls SiteAdmin.ApprovedUrls end
31: 00.27 00.27 MarkupToHTML end
32: 00.28 00.27 MarkupToHTML begin
33: 00.29 00.28 MarkupToHTML end
34: 00.29 00.28 MarkupToHTML begin
35: 00.30 00.29 MarkupToHTML end
36: 00.30 00.29 now
Peak memory: 3,808,584 bytes