From: Tim Wood Date: Fri, 3 Feb 2012 19:06:32 +0000 (-0700) Subject: Making isDST work in southern hemisphere countries X-Git-Tag: 1.4.0~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ded92cd00d484ebfa4aeb5d8aba01e0f8bab15b3;p=thirdparty%2Fmoment.git Making isDST work in southern hemisphere countries --- diff --git a/moment.js b/moment.js index 0f5ec14ab..29e51b5e0 100644 --- a/moment.js +++ b/moment.js @@ -583,7 +583,8 @@ }, isDST : function () { - return this.zone() !== moment([this.year()]).zone(); + return (this.zone() < moment([this.year()]).zone() || + this.zone() < moment([this.year(), 5]).zone()); }, day : function (input) { diff --git a/sitesrc/js/unit-tests.js b/sitesrc/js/unit-tests.js index 13eb82543..991bf3267 100755 --- a/sitesrc/js/unit-tests.js +++ b/sitesrc/js/unit-tests.js @@ -243,11 +243,12 @@ test("adding across DST", 3, function(){ var a = moment(new Date(2011, 2, 12, 5, 0, 0)); var b = moment(new Date(2011, 2, 12, 5, 0, 0)); var c = moment(new Date(2011, 2, 12, 5, 0, 0)); + var d = moment(new Date(2011, 2, 12, 5, 0, 0)); a.add('days', 1); b.add('hours', 24); c.add('months', 1); equal(a.hours(), 5, 'adding days over DST difference should result in the same hour'); - if (b.isDST()) { + if (b.isDST() && !d.isDST()) { equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour'); } else { equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time'); @@ -441,11 +442,26 @@ test("format multiple with zone", 1, function() { }); test("isDST", 2, function() { - // In the US 2011 March 13 is Daylight Savings Day - var a = moment(new Date(2011, 2, 12, 0, 0, 0)), - b = moment(new Date(2011, 2, 14, 0, 0, 0)); - ok(!a.isDST(), 'March 12 2011 is not DST'); - ok(b.isDST(), 'March 14 2011 is DST (Note: this unit test should fail if your timezone does not have Daylight Savings Time)'); + var janOffset = new Date(2011, 0, 1).getTimezoneOffset(), + julOffset = new Date(2011, 6, 1).getTimezoneOffset(), + janIsDst = janOffset < julOffset, + julIsDst = julOffset < janOffset, + jan1 = moment([2011]), + jul1 = moment([2011, 6]); + + if (janIsDst && julIsDst) { + ok(0, 'January and July cannot both be in DST'); + ok(0, 'January and July cannot both be in DST'); + } else if (janIsDst) { + ok(jan1.isDST(), 'January 1 is DST'); + ok(!jul1.isDST(), 'July 1 is not DST'); + } else if (julIsDst) { + ok(!jan1.isDST(), 'January 1 is not DST'); + ok(jul1.isDST(), 'July 1 is DST'); + } else { + ok(!jan1.isDST(), 'January 1 is not DST'); + ok(!jul1.isDST(), 'July 1 is not DST'); + } }); test("zone", 3, function() {