Off by one error in parsing of 'Date(a,b,c,d,e,f)' format.
Some weird json producers produce *strings* of that format instead of just
date strings ('yyyy-mm-dd hh:mm:ss') or javascript objects (new
Date(a,b,c,d,e,f)). These obviously didn't happen very much or I would have
noticed that when we parsed them, we're off by a month :)
diff --git a/render.js b/render.js
index ff7a050..dcff0cc 100644
--- a/render.js
+++ b/render.js
@@ -247,7 +247,12 @@
if (s == null) return s;
if (s && s.getDate) return s;
var g = DATE_RE2.exec(s);
- if (g) g = (',' + g[1]).split(',');
+ if (g) {
+ g = (',' + g[1]).split(',');
+ if (g.length >= 3) {
+ g[2]++; // date objects start at month=0, for some reason
+ }
+ }
if (!g || g.length > 8) g = DATE_RE1.exec(s);
if (g) {
return new Date(g[1], g[2] - 1, g[3] || 1,
diff --git a/t/trender.js b/t/trender.js
index 1dd9e17..cfac92e 100644
--- a/t/trender.js
+++ b/t/trender.js
@@ -169,17 +169,21 @@
wvtest('gridFromData', function() {
var rawdata = [
- ['a', 'b', 'c'],
- [1, 2, 3]
+ ['a', 'b', 'c', 'd', 'e', 'f'],
+ [1, 2, 3,
+ '2012-1-1 2:03:04', 'Date(2013,0,2,3,4,5)', new Date(2014,0,3,4,5,6)]
];
var otherdata = [
['a', 'b', 'c'],
- [1, 2, 4]
+ [1, 2, 4,
+ '2012-1-1 2:03:04', 'Date(2013,0,2,3,4,5)', new Date(2014,0,3,4,5,6)]
];
var grid = {
- headers: ['a', 'b', 'c'],
- data: [[1, 2, 3]],
- types: ['boolean', 'number', 'number']
+ headers: ['a', 'b', 'c', 'd', 'e', 'f'],
+ data: [[1, 2, 3,
+ new Date(2012,0,1,2,3,4),
+ new Date(2013,0,2,3,4,5), new Date(2014,0,3,4,5,6)]],
+ types: ['boolean', 'number', 'number', 'datetime', 'datetime', 'datetime']
};
var gtext = _gridAsText(grid);
WVPASSEQ(_gridAsText(afterquery.internal.gridFromData(grid)), gtext);