53 lines
1.7 KiB
Awk
53 lines
1.7 KiB
Awk
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
|
|
function date__parse_fr(date, parts, y, m, d) {
|
|
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
|
|
y = int(parts[3]);
|
|
m = int(parts[2]);
|
|
d = int(parts[1]);
|
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
|
} else if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9])/, parts)) {
|
|
basey = int(strftime("%Y")); basey = basey - basey % 100;
|
|
y = basey + int(parts[3]);
|
|
m = int(parts[2]);
|
|
d = int(parts[1]);
|
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
|
}
|
|
return -1;
|
|
}
|
|
function date__parse_mysql(date, parts, y, m, d) {
|
|
if (match(date, /([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, parts)) {
|
|
y = int(parts[1]);
|
|
m = int(parts[2]);
|
|
d = int(parts[3]);
|
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
|
}
|
|
return -1;
|
|
}
|
|
function date__parse_any(date, serial) {
|
|
serial = date__parse_fr(date);
|
|
if (serial == -1) serial = date__parse_mysql(date);
|
|
return serial;
|
|
}
|
|
function date_serial(date) {
|
|
return date__parse_any(date);
|
|
}
|
|
function date_parse(date, serial) {
|
|
serial = date__parse_any(date);
|
|
if (serial == -1) return date;
|
|
return strftime("%d/%m/%Y", serial);
|
|
}
|
|
function date_monday(date, serial, dow) {
|
|
serial = date__parse_any(date);
|
|
if (serial == -1) return date;
|
|
dow = strftime("%u", serial);
|
|
serial -= (dow - 1) * 86400;
|
|
return strftime("%d/%m/%Y", serial);
|
|
}
|
|
function date_add(date, nbdays, serial) {
|
|
serial = date__parse_any(date);
|
|
if (serial == -1) return date;
|
|
serial += nbdays * 86400;
|
|
return strftime("%d/%m/%Y", serial);
|
|
}
|