Don't try to parse non-SQL dates in Date.sqlToDate()

This commit is contained in:
Dan Stillman 2016-03-11 03:16:24 -05:00
parent edcd2a16d2
commit 28eaaaf2bf
2 changed files with 21 additions and 2 deletions

View file

@ -87,6 +87,10 @@ Zotero.Date = new function(){
**/ **/
function sqlToDate(sqldate, isUTC){ function sqlToDate(sqldate, isUTC){
try { try {
if (!this.isSQLDate(sqldate) && !this.isSQLDateTime(sqldate)) {
throw new Error("Invalid date");
}
var datetime = sqldate.split(' '); var datetime = sqldate.split(' ');
var dateparts = datetime[0].split('-'); var dateparts = datetime[0].split('-');
if (datetime[1]){ if (datetime[1]){
@ -98,7 +102,7 @@ Zotero.Date = new function(){
// Invalid date part // Invalid date part
if (dateparts.length==1){ if (dateparts.length==1){
return false; throw new Error("Invalid date part");
} }
if (isUTC){ if (isUTC){
@ -699,7 +703,7 @@ Zotero.Date = new function(){
function toUnixTimestamp(date) { function toUnixTimestamp(date) {
if (date === null || typeof date != 'object' || if (date === null || typeof date != 'object' ||
date.constructor.name != 'Date') { date.constructor.name != 'Date') {
throw ('Not a valid date in Zotero.Date.toUnixTimestamp()'); throw new Error(`'${date}' is not a valid date`);
} }
return Math.round(date.getTime() / 1000); return Math.round(date.getTime() / 1000);
} }

View file

@ -1,4 +1,19 @@
describe("Zotero.Date", function() { describe("Zotero.Date", function() {
describe("#sqlToDate()", function () {
it("should convert an SQL local date into a JS Date object", function* () {
var date = "2016-02-27 22:00:00";
var offset = new Date().getTimezoneOffset() * 60 * 1000;
date = Zotero.Date.sqlToDate(date);
assert.equal(date.getTime(), 1456610400000 + offset);
})
it("should convert an SQL UTC date into a JS Date object", function* () {
var date = "2016-02-27 22:00:00";
date = Zotero.Date.sqlToDate(date, true);
assert.equal(date.getTime(), 1456610400000);
})
})
describe("#isISODate()", function () { describe("#isISODate()", function () {
it("should determine whether a date is an ISO 8601 date", function () { it("should determine whether a date is an ISO 8601 date", function () {
assert.ok(Zotero.Date.isISODate("2015")); assert.ok(Zotero.Date.isISODate("2015"));