Difference between revisions of "Age"

From Sega Retro

(total rewrite)
Line 1: Line 1:
<includeonly>{{#vardefine:1|{{#replace:{{#explode:{{{1|}}}|-xx|0}}|x|0}}}}{{#vardefine:2|{{#replace:{{#explode:{{{2|}}}|-xx|0}}|x|0}}}}{{#if: {{#var:2}}
+
<includeonly>{{clearvar|dateisvague}}{{#vardefine:date2|{{#if:{{{2|}}}|{{{2|}}}|{{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY}}}}}}{{#vardefine:date1y|{{#sub:{{#explode:{{{1|}}}|-|0}}|0|4}}}}{{#if:{{#pos:{{#var:date1y}}|x}}
| {{#vardefine:date2_y|{{year|{{#var:2}}}}}}{{#vardefine:date2_m|{{month|{{#var:2}}}}}}{{#vardefine:date2_d|{{#sub:{{#explode:{{#var:2}}|-|2}}|0|2}}}}
+
| {{#vardefine:dateisvague|true}}{{#vardefine:date1ymin|{{#replace:{{#var:date1y}}|x|0}}}}{{#vardefine:date1ymax|{{#replace:{{#var:date1y}}|x|9}}}}
| {{#vardefine:date2_y|{{CURRENTYEAR}}}}{{#vardefine:date2_m|{{CURRENTMONTH}}}}{{#vardefine:date2_d|{{CURRENTDAY}}}}
+
| {{#vardefine:date1ymin|{{#var:date1y}}}}{{#vardefine:date1ymax|{{#var:date1y}}}}}}{{#vardefine:date1m|{{#replace:{{#sub:{{#explode:{{{1|}}}|-|1}}|0|2}}|x}}}}{{#if:{{#var:date1m}}
}}{{#vardefine:date1_y|{{year|{{#var:1}}}}}}{{#vardefine:date1_m|{{month|{{#var:1}}}}}}{{#vardefine:date1_d|{{#sub:{{#explode:{{#var:1}}|-|2}}|0|2}}}}{{#if:{{#var:date1_d}}||{{#vardefine:date1_d|01}}}}<!-- Set day to 01 if undefined (for simplicity). -->{{#if:{{#var:date2_d}}||{{#vardefine:date2_d|01}}}}{{#vardefine:age|}}{{#ifexpr: {{#var:date2_m}} > {{#var:date1_m}}
+
| {{#vardefine:date1mmin|{{#var:date1m}}}}{{#vardefine:date1mmax|{{#var:date1m}}}}
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}}}}}
+
| {{#vardefine:dateisvague|true}}{{#vardefine:date1mmin|01}}{{#vardefine:date1mmax|12}}}}{{#vardefine:date1d|{{#replace:{{#sub:{{#explode:{{{1|}}}|-|2}}|0|2}}|x}}}}{{#if:{{#var:date1d}}
}}{{#ifexpr: {{#var:date2_m}} < {{#var:date1_m}}
+
| {{#vardefine:date1dmin|{{#var:date1d}}}}{{#vardefine:date1dmax|{{#var:date1d}}}}
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}-1}}}}
+
| {{#vardefine:dateisvague|true}}{{#vardefine:date1dmin|01}}{{#vardefine:date1dmax|31}}}}{{#if:{{#var:dateisvague}}
}}{{#ifexpr: {{#var:date2_m}} = {{#var:date1_m}}
+
| {{#vardefine:age1|{{age/CalcAge|{{#var:date1ymax}}-{{#var:date1mmax}}-{{#var:date1dmax}}|{{#var:date2}}}}}}{{#vardefine:age2|{{age/CalcAge|{{#var:date1ymin}}-{{#var:date1mmin}}-{{#var:date1dmin}}|{{#var:date2}}}}}}{{#ifeq:{{#var:age1}}|{{#var:age2}}
| {{#ifexpr: {{#var:date2_d}} > {{#var:date1_d}}
+
| {{#var:age1}}
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}}}}}
+
| {{#if:{{{highonly|}}}||{{#var:age1}}}}{{#if:{{{lowonly|}}}{{{highonly|}}}||-}}{{#if:{{{lowonly|}}}||{{#var:age2}}}}}}
}}{{#ifexpr: {{#var:date2_d}} < {{#var:date1_d}}
+
| {{age/CalcAge|{{#var:date1y}}-{{#var:date1m}}-{{#var:date1d}}|{{#var:date2}}}}
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}-1}}}}
+
}}</includeonly><noinclude>
}}{{#ifexpr: {{#var:date2_d}} = {{#var:date1_d}}
 
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}}}}}
 
}}
 
}}{{#ifeq: {{#var:date1_m}} | 00
 
| {{#vardefine:age|{{#expr:{{#var:date2_y}}-{{#var:date1_y}}-1}}-{{#expr:{{#var:date2_y}}-{{#var:date1_y}}}}}}
 
}}{{#var:age}}</includeonly><noinclude>
 
 
Convert a date in the format YYYY-MM-DD to an age in years (based on the current date).
 
Convert a date in the format YYYY-MM-DD to an age in years (based on the current date).
  
 
==Usage==
 
==Usage==
<tt><nowiki>{{</nowiki>age|1991-06-23}}</tt>
+
* <nowiki>{{age|1991-06-23}}</nowiki> = {{age|1991-06-23}}
 
+
* <nowiki>{{age|1991}}</nowiki> = {{age|1991}}
returns
+
* <nowiki>{{age|1999-xx-xx}}</nowiki> = {{age|1999-xx-xx}}
 
+
* <nowiki>{{age|199x}}</nowiki> = {{age|199x}}
{{age|1991-06-23}}
+
* <nowiki>{{age|199x|lowonly=yes}}</nowiki> = {{age|199x|lowonly=yes}}
 +
* <nowiki>{{age|199x|highonly=yes}}</nowiki> = {{age|199x|highonly=yes}}
  
 
===Optional parameter===
 
===Optional parameter===
 
Add a second date to calculate the age on that date.
 
Add a second date to calculate the age on that date.
  
<tt><nowiki>{{</nowiki>age|1991-06-23|1999-09-09}}</tt>
+
* <nowiki>{{age|1991-06-23|1999-09-09}}</nowiki> = {{age|1991-06-23|1999-09-09}}
 
 
returns
 
 
 
{{age|1991-06-23|1999-09-09}}
 
  
 
[[Category:Sega Retro templates]]</noinclude>
 
[[Category:Sega Retro templates]]</noinclude>

Revision as of 18:40, 19 March 2019

Convert a date in the format YYYY-MM-DD to an age in years (based on the current date).

Usage

  • {{age|1991-06-23}} = 32
  • {{age|1991}} = 32-33
  • {{age|1999-xx-xx}} = 24-25
  • {{age|199x}} = 24-34
  • {{age|199x|lowonly=yes}} = 24
  • {{age|199x|highonly=yes}} = 34

Optional parameter

Add a second date to calculate the age on that date.

  • {{age|1991-06-23|1999-09-09}} = 8