From 44930cc4667268c20493d7e97387db2a97d61a26 Mon Sep 17 00:00:00 2001 From: Alexander Gaevsky Date: Sun, 27 Dec 2015 01:32:28 +0200 Subject: Fixed #24980 -- Fixed day determination in admin calendar widget. --- js_tests/admin/core.test.js | 46 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'js_tests') diff --git a/js_tests/admin/core.test.js b/js_tests/admin/core.test.js index 0d6a12d44c..43fb27a7af 100644 --- a/js_tests/admin/core.test.js +++ b/js_tests/admin/core.test.js @@ -57,7 +57,47 @@ test('Date.strftime', function(assert) { }); test('String.strptime', function(assert) { - var date = new Date(1988, 1, 26); - assert.equal('1988-02-26'.strptime('%Y-%m-%d').toString(), date.toString()); - assert.equal('26/02/88'.strptime('%d/%m/%y').toString(), date.toString()); + // Use UTC functions for extracting dates since the calendar uses them as + // well. Month numbering starts with 0 (January). + var firstParsedDate = '1988-02-26'.strptime('%Y-%m-%d'); + assert.equal(firstParsedDate.getUTCDate(), 26); + assert.equal(firstParsedDate.getUTCMonth(), 1); + assert.equal(firstParsedDate.getUTCFullYear(), 1988); + + var secondParsedDate = '26/02/88'.strptime('%d/%m/%y'); + assert.equal(secondParsedDate.getUTCDate(), 26); + assert.equal(secondParsedDate.getUTCMonth(), 1); + assert.equal(secondParsedDate.getUTCFullYear(), 1988); + + var format = django.get_format('DATE_INPUT_FORMATS')[0]; + var thirdParsedDate = '1983-11-20'.strptime(format); + + assert.equal(thirdParsedDate.getUTCDate(), 20); + assert.equal(thirdParsedDate.getUTCMonth(), 10); + assert.equal(thirdParsedDate.getUTCFullYear(), 1983); + + // Extracting from a Date object with local time must give the correct + // result. Without proper conversion, timezones from GMT+0100 to GMT+1200 + // gives a date one day earlier than necessary, e.g. converting local time + // Feb 26, 1988 00:00:00 EEST is Feb 25, 21:00:00 UTC. + + // Checking timezones from GMT+0100 to GMT+1200 + var i, tz, date; + for (i = 1; i <= 12; i++) { + tz = i > 9 ? '' + i : '0' + i; + date = new Date(Date.parse('Feb 26, 1988 00:00:00 GMT+' + tz + '00')); + assert.notEqual(date.getUTCDate(), 26); + assert.equal(date.getUTCDate(), 25); + assert.equal(date.getUTCMonth(), 1); + assert.equal(date.getUTCFullYear(), 1988); + } + + // Checking timezones from GMT+0000 to GMT-1100 + for (i = 0; i <= 11; i++) { + tz = i > 9 ? '' + i : '0' + i; + date = new Date(Date.parse('Feb 26, 1988 00:00:00 GMT-' + tz + '00')); + assert.equal(date.getUTCDate(), 26); + assert.equal(date.getUTCMonth(), 1); + assert.equal(date.getUTCFullYear(), 1988); + } }); -- cgit v1.3