Browse Source

Dates serialize to ISO format. ISO date string deserialize to Dates when `dynamicTyping` is true.

pull/515/merge
jeff 7 years ago committed by Sergi Almacellas Abellana
parent
commit
757dc37915
  1. 12
      papaparse.js
  2. 14
      tests/test-cases.js

12
papaparse.js

@ -410,6 +410,9 @@ @@ -410,6 +410,9 @@
if (typeof str === 'undefined' || str === null)
return '';
if (str.constructor === Date)
return JSON.stringify(str).slice(1, 25);
str = str.toString().replace(quoteCharRegex, _quoteChar + _quoteChar);
var needsQuotes = (typeof _quotes === 'boolean' && _quotes)
@ -956,6 +959,7 @@ @@ -956,6 +959,7 @@
{
// One goal is to minimize the use of regular expressions...
var FLOAT = /^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i;
var ISO_DATE = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var self = this;
var _stepCounter = 0; // Number of times step was called (number of rows parsed)
@ -1131,12 +1135,12 @@ @@ -1131,12 +1135,12 @@
return true;
else if (value === 'false' || value === 'FALSE')
return false;
else if(FLOAT.test(value)) {
else if (FLOAT.test(value))
return parseFloat(value);
}
else {
else if (ISO_DATE.test(value))
return new Date(value);
else
return (value === '' ? null : value);
}
}
return value;
}

14
tests/test-cases.js

@ -885,6 +885,15 @@ var PARSE_TESTS = [ @@ -885,6 +885,15 @@ var PARSE_TESTS = [
errors: []
}
},
{
description: "Dynamic typing converts ISO date strings to Dates",
input: 'ISO date,long date\r\n2018-05-04T21:08:03.269Z,Fri May 04 2018 14:08:03 GMT-0700 (PDT)\r\n2018-05-08T15:20:22.642Z,Tue May 08 2018 08:20:22 GMT-0700 (PDT)',
config: { dynamicTyping: true },
expected: {
data: [["ISO date", "long date"], [new Date("2018-05-04T21:08:03.269Z"), "Fri May 04 2018 14:08:03 GMT-0700 (PDT)"], [new Date("2018-05-08T15:20:22.642Z"), "Tue May 08 2018 08:20:22 GMT-0700 (PDT)"]],
errors: []
}
},
{
description: "Blank line at beginning",
input: '\r\na,b,c\r\nd,e,f',
@ -1435,6 +1444,11 @@ var UNPARSE_TESTS = [ @@ -1435,6 +1444,11 @@ var UNPARSE_TESTS = [
input: [{"Col1": "a", "Col2": "b", "Col3": "c"}, {"Col1": "d", "Col2": "e", "Col3": "f"}],
config: {header: false},
expected: 'a,b,c\r\nd,e,f'
},
{
description: "Date handling",
input: [{date: new Date("2018-05-04T21:08:03.269Z"), "not a date": 16}, {date: new Date("Tue May 08 2018 08:20:22 GMT-0700 (PDT)"), "not a date": 32}],
expected: 'date,not a date\r\n2018-05-04T21:08:03.269Z,16\r\n2018-05-08T15:20:22.000Z,32'
}
];

Loading…
Cancel
Save