aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2011-12-04 16:32:06 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2011-12-04 16:32:06 -0500
commitd1808f886236e02fa5de7bdfd3c956845eca7e8e (patch)
treea839986fce23c2a41291040eb9e1f6b74c6ab787
parentd46a56f2281e5f992484df00debe8b8f97097e31 (diff)
Fix client-side [int] parsing and extend server-side [time] parsing to support a format that also works portably in JavaScript
-rw-r--r--lib/js/urweb.js4
-rw-r--r--src/c/urweb.c11
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);