Template talk:Gregorian serial date

(Redirected from Template talk:Gregorian serial date/doc)
Latest comment: 6 years ago by Johnuniq in topic Module:Age

Bug?

edit

Something's odd with this. The most popular way to count days of the common era is day 1 = 0001-01-01.

{{ Gregorian serial date | year=1 | month=1 | day=1 }} gives 736815

The only alternative I've ever heard of is to count days since 0001-01-01, therefore I expect to get 1 or 0 for this date, not -1. -- Omniplex 08:17, 21 June 2006 (UTC)Reply

I'm checking this against The Calendar Converter, It seems that todays serial is correct, but it's having trouble with 1/1/01. Proably something to do with leapyears.

Found the bug, It always subtracts a day to deal with February having less than 30 days. No exception was written if we haven't reached February yet this year.--God Ω War 16:40, 21 June 2006 (UTC)Reply

Checking today
{{ Gregorian serial date | year=2018 | month=05 | day=01 }} gives 736815
With REXX I get one less, that's fine, it counts days since 0001-01-01. -- Omniplex 21:00, 21 June 2006 (UTC)Reply

Test

edit

{{ Gregorian serial date | year=0 | month=3 | day=1 }} gives 736815
{{ Gregorian serial date | year=0 | month=1 | day=1 }} gives 736815

Testing if we get away with < 0 or really need < 1. -- Omniplex 22:21, 21 June 2006 (UTC) Nope, really wrong for March 1, 1 BC (= year 0). -- Omniplex 22:24, 21 June 2006 (UTC)Reply

This is why I put in the error message. Year 0 does not exist, that would be a B.C date which needs extra coding to handle.--God Ω War 23:53, 21 June 2006 (UTC)Reply

Year 0 as we count it today is simply 1 BC, it certainly "exists" in a proleptic Gregorian calendar, like 199 AD exists (also proleptic). Apparently they tuned it to be in sync with Julian from 0200-03-01 up to 0300-02-28. If you have a clue why they didn't calibrate it for year 1 please add it somewhere to the articles, it's puzzling. Why the third century instead of the first? -- Omniplex 01:57, 22 June 2006 (UTC)Reply

Please replace {{void|...}} with {{ns:0|...}}

edit

As {{ns:0|xxx}} is now working as {{void|xxx}}, then we should now replace all {{void|...}} in this page with {{ns:0|...}}, to avoid using customized template, and to use built-in MediaWiki features as much as possible. --Ans (talk) 05:22, 27 March 2009 (UTC)Reply

Suggestion for better code

edit

Please take a look at this code from the same template of Korean WP:

{{#expr:trunc(
floor((({{{1|{{CURRENTYEAR}}}}})*12+({{{2|{{CURRENTMONTH}}}}})-3)*365/12+0.96)
+floor(((((({{{2|{{CURRENTMONTH}}}}})-3) mod 12)+12) mod 12)/5.4)
+floor((({{{1|{{CURRENTYEAR}}}}})*12+({{{2|{{CURRENTMONTH}}}}})-3)/48)
-floor((({{{1|{{CURRENTYEAR}}}}})*12+({{{2|{{CURRENTMONTH}}}}})-3)/1200)
+floor((({{{1|{{CURRENTYEAR}}}}})*12+({{{2|{{CURRENTMONTH}}}}})-3)/4800)
+({{{3|{{CURRENTDAY}}}}})
-306
)}}<noinclude>
{{Documentation}}
</noinclude>

And code for subst:

{{{{{|safesubst:}}}#expr:trunc(
floor((({{{1|{{{{{|safesubst:}}}CURRENTYEAR}}}}})*12+({{{2|{{{{{|safesubst:}}}CURRENTMONTH}}}}})-3)*365/12+0.96)
+floor(((((({{{2|{{{{{|safesubst:}}}CURRENTMONTH}}}}})-3) mod 12)+12) mod 12)/5.4)
+floor((({{{1|{{{{{|safesubst:}}}CURRENTYEAR}}}}})*12+({{{2|{{{{{|safesubst:}}}CURRENTMONTH}}}}})-3)/48)
-floor((({{{1|{{{{{|safesubst:}}}CURRENTYEAR}}}}})*12+({{{2|{{{{{|safesubst:}}}CURRENTMONTH}}}}})-3)/1200)
+floor((({{{1|{{{{{|safesubst:}}}CURRENTYEAR}}}}})*12+({{{2|{{{{{|safesubst:}}}CURRENTMONTH}}}}})-3)/4800)
+({{{3|{{{{{|safesubst:}}}CURRENTDAY}}}}})
-306
)}}<noinclude>
{{Documentation}}
</noinclude>

Above codes are better than current version of this template, in every aspects. It uses no "#ifexpr:" parserfunction so it takes fewer server load with lower "preprocessor node count", uses floor instead of round(little expensive than floor), fixes problem with pre-epoch, and fixes the bug with its "trunc" calculation. And expanded month, day numbers are possible with this code, for example: {{gsd|2000|2|30}} (which means Mar. 1, 2000) or {{gsd|2000|0|1}} (Dec. 1, 1999). --Alphanis (talk) 18:18, 28 May 2011 (UTC)Reply

What are we counting?

edit

January 13, 2013 will have GSD 734881. In Julian calendar it would be the same as December 31, 2012. J. calendar wasn't reformed, it doesn't skip any leap years, so this day would be number (2012 × 365.25 =) 734883. It's because Proleptic Gregorian calendar was two days behind Julian calendar at year 1 AD. In 1582 Calendar Reform ten days were written of, so proleptic Gregorian calendar would be equivalent to Julian c. from March 200 to February 300 AD. Fictitious non-leap years 100 and 200 AD create two-day deficit. Perhaps this should be mentioned in documentation? --Olovni (talk) 22:41, 20 November 2011 (UTC)Reply

Module:Age

edit

I created Module:Age to fix some problems reported with {{Age in years and months}}, then experimented by adding some code to implement {{Age in days}} and {{Gregorian serial date}}. I do not know if this template has any performance issues, but if wanted, it could be replaced with the module. More information is at Module talk:Age. Johnuniq (talk) 10:04, 2 April 2013 (UTC)Reply

I changed the template to use the module because it is better that dates be checked for validity.
Wikitext Old template Module
{{gsd|30 April 1985}} 736815 724761
{{gsd|1985|4|30}} 736815 724761
{{gsd|year=1985|month=4|day=30}} 724761 724761
{{gsd|year=1985|month=4|day=31}} 724762 Error: Need valid year, month, day
Johnuniq (talk) 02:43, 1 May 2018 (UTC)Reply