From b2d1c581afdb7ad9ede5d43158306c45177ef560 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 4 Dec 2011 16:32:06 -0500 Subject: Fix client-side [int] parsing and extend server-side [time] parsing to support a format that also works portably in JavaScript --- lib/js/urweb.js | 4 ++-- src/c/urweb.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 4fee886a..a3976fef 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -143,7 +143,7 @@ function addSeconds(tm, n) { function stringToTime_error(string) { var t = Date.parse(string); if (isNaN(t)) - onFail("Invalid date string: " + string); + er("Invalid date string: " + string); else return t * 1000; } @@ -962,7 +962,7 @@ function strlenGe(s, len) { function trimZeroes(s) { for (var i = 0; i < s.length; ++i) - if (s[i] != '0') { + if (s.charAt(i) != '0') { if (i > 0) return s.substring(i); else diff --git a/src/c/urweb.c b/src/c/urweb.c index 270443c6..c71baee1 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -2150,6 +2150,7 @@ uw_unit uw_Basis_htmlifyBool_w(uw_context ctx, uw_Basis_bool b) { #define TIME_FMT "%x %X" #define TIME_FMT_PG "%Y-%m-%d %T" +#define TIME_FMT_JS "%Y/%m/%d %T" uw_Basis_string uw_Basis_timeToString(uw_context, uw_Basis_time); @@ -2799,6 +2800,11 @@ uw_Basis_time *uw_Basis_stringToTime(uw_context ctx, uw_Basis_string s) { r->seconds = mktime(&stm); r->microseconds = 0; return r; + } else if (strptime(s, TIME_FMT_JS, &stm) == end) { + uw_Basis_time *r = uw_malloc(ctx, sizeof(uw_Basis_time)); + r->seconds = mktime(&stm); + r->microseconds = 0; + return r; } else return NULL; @@ -2939,6 +2945,9 @@ uw_Basis_time uw_Basis_stringToTime_error(uw_context ctx, uw_Basis_string s) { } else if (strptime(s, TIME_FMT, &stm) == end) { uw_Basis_time r = { mktime(&stm) }; return r; + } else if (strptime(s, TIME_FMT_JS, &stm) == end) { + uw_Basis_time r = { mktime(&stm) }; + return r; } else uw_error(ctx, FATAL, "Can't parse time: %s", uw_Basis_htmlifyString(ctx, s)); } @@ -3883,7 +3892,7 @@ uw_Basis_time *uw_Basis_readUtc(uw_context ctx, uw_Basis_string s) { char *end = strchr(s, 0); stm.tm_isdst = -1; - if (strptime(s, TIME_FMT_PG, &stm) == end || strptime(s, TIME_FMT, &stm) == end) { + if (strptime(s, TIME_FMT_PG, &stm) == end || strptime(s, TIME_FMT, &stm) == end || strptime(s, TIME_FMT_JS, &stm) == end) { uw_Basis_time *r = uw_malloc(ctx, sizeof(uw_Basis_time)); r->seconds = timegm(&stm); -- cgit v1.2.3