Fix date vs. datetime field type detection.
diff --git a/render.js b/render.js
index d585072..04d5c3c 100644
--- a/render.js
+++ b/render.js
@@ -44,11 +44,13 @@
CANT_NUM = 1;
-CANT_DATE = 2;
-CANT_BOOL = 4;
+CANT_BOOL = 2;
+CANT_DATE = 4;
+CANT_DATETIME = 8;
T_NUM = 'number';
T_DATE = 'date';
+T_DATETIME = 'datetime';
T_BOOL = 'boolean';
T_STRING = 'string';
@@ -59,9 +61,13 @@
var row = data[rowi];
for (var coli in row) {
impossible[coli] += 0;
- //impossible[coli] |= CANT_DATE; // fixme
var cell = row[coli];
- if (isNaN(Date.parse(cell))) impossible[coli] |= CANT_DATE;
+ var d = myParseDate(cell);
+ if (isNaN(d)) {
+ impossible[coli] |= CANT_DATE | CANT_DATETIME;
+ } else if (d.getHours() || d.getMinutes() || d.getSeconds()) {
+ impossible[coli] |= CANT_DATE; // has time, so isn't a pure date
+ }
var f = cell * 1;
if (isNaN(f)) impossible[coli] |= CANT_NUM;
if (!(cell == 0 || cell == 1 ||
@@ -70,6 +76,7 @@
cell == 'True' || cell == 'False')) impossible[coli] |= CANT_BOOL;
}
}
+ console.debug('guessTypes impossibility list:', impossible);
var types = [];
for (var coli in impossible) {
var imp = impossible[coli];
@@ -79,6 +86,8 @@
types[coli] = T_NUM;
} else if (!(imp & CANT_DATE)) {
types[coli] = T_DATE;
+ } else if (!(imp & CANT_DATETIME)) {
+ types[coli] = T_DATETIME;
} else {
types[coli] = T_STRING;
}
@@ -103,7 +112,7 @@
function parseDates(data, types) {
for (var coli in types) {
var type = types[coli];
- if (type === T_DATE || type == T_DATE) {
+ if (type === T_DATE || type === T_DATETIME) {
for (var rowi in data) {
data[rowi][coli] = myParseDate(data[rowi][coli]);
}
@@ -326,7 +335,8 @@
for (var valuei in values) {
if (ingrid.types[keycol] === T_NUM) {
wantvals.push(parseFloat(values[valuei]));
- } else if (ingrid.types[keycol] === T_DATE) {
+ } else if (ingrid.types[keycol] === T_DATE ||
+ ingrid.types[keycol] === T_DATETIME) {
wantvals.push(myParseDate(values[valuei]));
} else {
wantvals.push(values[valuei]);