| |
| /pliant/util/encoding/date.pli |
| |
| 1 |
function rfc1123_date dt -> s | |
| 2 |
arg DateTime dt ; arg Str s | |
| 3 |
var Int year month day hour minute second ; var Float fraction | |
| 4 |
dt split year month day hour minute second fraction | |
| 5 |
var Str dow := day_name dt:day_of_week | |
| 6 |
s := upper:(dow 0 1)+(dow 1 2) | |
| 7 |
s += ", "+(right string:day 2 "0") | |
| 8 |
s += " "+("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" (month-1)*4 3) | |
| 9 |
s += " "+string:year | |
| 10 |
s += " "+(right string:hour 2 "0") | |
| 11 |
s += ":"+(right string:minute 2 "0") | |
| 12 |
s += ":"+(right string:second 2 "0") | |
| 13 |
s += " GMT" | |
| 14 |
| |
| 15 |
function rfc1123_date s -> dt | |
| 16 |
arg Str s ; arg DateTime dt | |
| 17 |
var Str timestamp := replace s "-" " " | |
| 18 |
if (timestamp parse any "," (var Int day) _ any:(var Str mon) _ (var Int year) _ (var Int hour) ":" (var Int minute) ":" (var Int second) any) | |
| 19 |
var Int month := ("jan feb mar apr may jun jul aug sep oct nov dec" search lower:(mon 0 3) -4)\4+1 | |
| 20 |
year += shunt year>=1000 0 year>=80 1900 2000 | |
| 21 |
dt := datetime year month day hour minute second 0 | |
| 22 |
else | |
| 23 |
dt := undefined | |
| 24 |
| |
| 25 |
export rfc1123_date | |
| 26 |
| |
| 27 |
| |
| |