Ambiguous dates

As a follow on from the ambiguity discussion, here is how to accept dates, 
and report them as either us, international, or ambiguous:


dates: (date, -#a)*.
-date: us; int; ambi.
us: month, -"/", day, -"/", year.
int: day, -"/", month, -"/", year.
ambi: monthday, -"/", monthday, -"/", year.
monthday: -month.
day: "1", ["3"-"9"]; "2", ["0"-"9"]; "3", ["0"-"1"].
month: "0"?, ["1"-"9"]; "1", ["0"-"2"].
year: d, d, d, d.
-d: ["0"-"9"].

This reports 


    <int>
       <day>31</day>
       <month>12</month>
       <year>1999</year>
    </int>
    <us>
       <month>12</month>
       <day>31</day>
       <year>1999</year>
    </us>
    <ambi>
       <monthday>11</monthday>
       <monthday>12</monthday>
       <year>2025</year>
    </ambi>

If you object to the fact that it reports 11/11/2025 as ambiguous, then 
strap yourself in:


dates: (date, -#a)*.
-date: us; int; ambi.

us: month, -"/", day, -"/", year.

int: day, "/", month, "/", year;
      d1, -"/", m1, -"/",year;
      d2, -"/", m2, -"/",year;
      d3, -"/", m3, -"/",year; 
      d4, -"/", m4, -"/",year; 
      d5, -"/", m5, -"/",year; 
      d6, -"/", m6, -"/",year; 
      d7, -"/", m7, -"/",year; 
      d8, -"/", m8, -"/",year; 
      d9, -"/", m9, -"/",year; 
      d10, -"/", m10, -"/",year;
      d11, -"/", m11, -"/",year;
      d12, -"/", m12, -"/",year.

d1>day: "0"?, "1".
d2>day: "0"?, "2".
d3>day: "0"?, "3".
d4>day: "0"?, "4".
d5>day: "0"?, "5".
d6>day: "0"?, "6".
d7>day: "0"?, "7".
d8>day: "0"?, "8".
d9>day: "0"?, "9".
d10>day: "10".
d11>day: "11".
d12>day: "12".

m1>month: "0"?, "1".
m2>month: "0"?, "2".
m3>month: "0"?, "3".
m4>month: "0"?, "4".
m5>month: "0"?, "5".
m6>month: "0"?, "6".
m7>month: "0"?, "7".
m8>month: "0"?, "8".
m9>month: "0"?, "9".
m10>month: "10".
m11>month: "11".
m12>month: "12".

ambi: dm1, -"/", md1, -"/", year;
       dm2, -"/", md2, -"/", year;
       dm3, -"/", md3, -"/", year;
       dm4, -"/", md4, -"/", year;
       dm5, -"/", md5, -"/", year;
       dm6, -"/", md6, -"/", year;
       dm7, -"/", md7, -"/", year;
       dm8, -"/", md8, -"/", year;
       dm9, -"/", md9, -"/", year;
       dm10, -"/", md10, -"/", year;
       dm11, -"/", md11, -"/", year;
       dm12, -"/", md12, -"/", year.

  dm1>daymonth: "0"?, "1".
  dm2>daymonth: "0"?, "2".
  dm3>daymonth: "0"?, "3".
  dm4>daymonth: "0"?, "4".
  dm5>daymonth: "0"?, "5".
  dm6>daymonth: "0"?, "6".
  dm7>daymonth: "0"?, "7".
  dm8>daymonth: "0"?, "8".
  dm9>daymonth: "0"?, "9".
dm10>daymonth: "10".
dm11>daymonth: "11".
dm12>daymonth: "12".

  md1>daymonth: "0"?, ["23456789"]; "1", ["012"].
  md2>daymonth: "0"?, ["13456789"]; "1", ["012"].
  md3>daymonth: "0"?, ["12456789"]; "1", ["012"].
  md4>daymonth: "0"?, ["12356789"]; "1", ["012"].
  md5>daymonth: "0"?, ["12346789"]; "1", ["012"].
  md6>daymonth: "0"?, ["12345789"]; "1", ["012"].
  md7>daymonth: "0"?, ["12345689"]; "1", ["012"].
  md8>daymonth: "0"?, ["12345679"]; "1", ["012"].
  md9>daymonth: "0"?, ["12345678"]; "1", ["012"].
md10>daymonth: "0"?, ["123456789"]; "1", ["12"].
md11>daymonth: "0"?, ["123456789"]; "1", ["02"].
md12>daymonth: "0"?, ["123456789"]; "1", ["01"].

day: "1", ["3"-"9"]; "2", ["0"-"9"]; "3", ["0"-"1"].
month: "0"?, ["1"-"9"]; "1", ["0"-"2"].
year: d, d, d, d.
-d: ["0"-"9"].

which produces


    <int>
       <day>11</day>
       <month>11</month>
       <year>2025</year>
    </int>
    <ambi>
       <daymonth>11</daymonth>
       <daymonth>12</daymonth>
       <year>2025</year>
    </ambi>
    <us>
       <month>11</month>
       <day>13</day>
       <year>2025</year>
    </us>

Steven

Received on Tuesday, 25 November 2025 21:19:54 UTC