463 (month >= 8 and month%2 == 0 and day + 1 > 31) or |
463 (month >= 8 and month%2 == 0 and day + 1 > 31) or |
464 (month >= 8 and month%2 == 1 and day + 1 > 30) |
464 (month >= 8 and month%2 == 1 and day + 1 > 30) |
465 then |
465 then |
466 if month + 1 > 12 then |
466 if month + 1 > 12 then |
467 year = year + 1; |
467 year = year + 1; |
|
468 month = 1; |
|
469 day = 1; |
468 else |
470 else |
469 month = month + 1; |
471 month = month + 1; |
|
472 day = 1; |
470 end |
473 end |
471 else |
474 else |
472 day = day + 1; |
475 day = day + 1; |
473 end |
476 end |
474 return strformat("%.02d%.02d%.02d", year, month, day); |
477 return strformat("%.02d%.02d%.02d", year, month, day); |
494 end |
497 end |
495 end |
498 end |
496 |
499 |
497 local function decrementDay(bare_day) |
500 local function decrementDay(bare_day) |
498 local year, month, day = bare_day:match("^(%d%d)(%d%d)(%d%d)"); |
501 local year, month, day = bare_day:match("^(%d%d)(%d%d)(%d%d)"); |
|
502 local leapyear = false; |
499 module:log("debug", tostring(day).."/"..tostring(month).."/"..tostring(year)) |
503 module:log("debug", tostring(day).."/"..tostring(month).."/"..tostring(year)) |
|
504 |
500 day = tonumber(day); |
505 day = tonumber(day); |
501 month = tonumber(month); |
506 month = tonumber(month); |
502 year = tonumber(year); |
507 year = tonumber(year); |
503 |
508 |
|
509 if year%4 == 0 and year%100 == 0 then |
|
510 if year%400 == 0 then |
|
511 leapyear = true; |
|
512 else |
|
513 leapyear = false; -- turn of the century but not a leapyear |
|
514 end |
|
515 elseif year%4 == 0 then |
|
516 leapyear = true; |
|
517 end |
|
518 |
504 if day - 1 == 0 then |
519 if day - 1 == 0 then |
505 if month - 1 == 0 then |
520 if month - 1 == 0 then |
506 year = year - 1; |
521 year = year - 1; |
|
522 month = 12; |
|
523 day = 31; |
507 else |
524 else |
508 month = month - 1; |
525 month = month - 1; |
|
526 if (month == 2 and leapyear) then day = 29 |
|
527 elseif (month == 2 and not leapyear) then day = 28 |
|
528 elseif (month < 8 and month%2 == 1) or (month >= 8 and month%2 == 0) then day = 31 |
|
529 else day = 30 |
|
530 end |
509 end |
531 end |
510 else |
532 else |
511 day = day - 1; |
533 day = day - 1; |
512 end |
534 end |
513 return strformat("%.02d%.02d%.02d", year, month, day); |
535 return strformat("%.02d%.02d%.02d", year, month, day); |