]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Setting year should keep time when offset changes
authorMatt Johnson <mj1856@hotmail.com>
Sat, 12 Mar 2016 20:09:17 +0000 (13:09 -0700)
committerIskren Chernev <iskren.chernev@gmail.com>
Sat, 16 Apr 2016 06:50:43 +0000 (23:50 -0700)
src/lib/units/year.js
src/test/moment/getters_setters.js
src/test/moment/start_end_of.js

index a09e5e3acbfc96096665a71ce612ca49382239a6..b86df29be83522e72381747cbb0732a1b29d2d80 100644 (file)
@@ -63,7 +63,7 @@ hooks.parseTwoDigitYear = function (input) {
 
 // MOMENTS
 
-export var getSetYear = makeGetSet('FullYear', false);
+export var getSetYear = makeGetSet('FullYear', true);
 
 export function getIsLeapYear () {
     return isLeapYear(this.year());
index 6f7b5216dc8a1fc6538e92fb01712d48280a6d60..8f23e68820173ed9b612b3bbefe6a40b6ccced70 100644 (file)
@@ -251,3 +251,69 @@ test('string setters', function (assert) {
     assert.equal(a.seconds(), 8, 'second');
     assert.equal(a.milliseconds(), 9, 'milliseconds');
 });
+
+test('setters across DST +1', function (assert) {
+    var oldUpdateOffset = moment.updateOffset,
+        // Based on a real story somewhere in America/Los_Angeles
+        dstAt = moment('2014-03-09T02:00:00-08:00').parseZone(),
+        m;
+
+    moment.updateOffset = function (mom, keepTime) {
+        if (mom.isBefore(dstAt)) {
+            mom.utcOffset(-8, keepTime);
+        } else {
+            mom.utcOffset(-7, keepTime);
+        }
+    };
+
+    m = moment('2014-03-15T00:00:00-07:00').parseZone();
+    m.year(2013);
+    assert.equal(m.format(), '2013-03-15T00:00:00-08:00', 'year across +1');
+
+    m = moment('2014-03-15T00:00:00-07:00').parseZone();
+    m.month(0);
+    assert.equal(m.format(), '2014-01-15T00:00:00-08:00', 'month across +1');
+
+    m = moment('2014-03-15T00:00:00-07:00').parseZone();
+    m.date(1);
+    assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'date across +1');
+
+    m = moment('2014-03-09T03:05:00-07:00').parseZone();
+    m.hour(0);
+    assert.equal(m.format(), '2014-03-09T00:05:00-08:00', 'hour across +1');
+
+    moment.updateOffset = oldUpdateOffset;
+});
+
+test('setters across DST -1', function (assert) {
+    var oldUpdateOffset = moment.updateOffset,
+        // Based on a real story somewhere in America/Los_Angeles
+        dstAt = moment('2014-11-02T02:00:00-07:00').parseZone(),
+        m;
+
+    moment.updateOffset = function (mom, keepTime) {
+        if (mom.isBefore(dstAt)) {
+            mom.utcOffset(-7, keepTime);
+        } else {
+            mom.utcOffset(-8, keepTime);
+        }
+    };
+
+    m = moment('2014-11-15T00:00:00-08:00').parseZone();
+    m.year(2013);
+    assert.equal(m.format(), '2013-11-15T00:00:00-07:00', 'year across -1');
+
+    m = moment('2014-11-15T00:00:00-08:00').parseZone();
+    m.month(0);
+    assert.equal(m.format(), '2014-01-15T00:00:00-07:00', 'month across -1');
+
+    m = moment('2014-11-15T00:00:00-08:00').parseZone();
+    m.date(1);
+    assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'date across -1');
+
+    m = moment('2014-11-02T03:30:00-08:00').parseZone();
+    m.hour(0);
+    assert.equal(m.format(), '2014-11-02T00:30:00-07:00', 'hour across -1');
+
+    moment.updateOffset = oldUpdateOffset;
+});
index 8773d1bf4826998c92cc80ed4b74c478fdcd0845..dac79b750961d405a8a7b46bd652f4522549470a 100644 (file)
@@ -293,6 +293,10 @@ test('startOf across DST +1', function (assert) {
         }
     };
 
+    m = moment('2014-03-15T00:00:00-07:00').parseZone();
+    m.startOf('y');
+    assert.equal(m.format(), '2014-01-01T00:00:00-08:00', 'startOf(\'year\') across +1');
+
     m = moment('2014-03-15T00:00:00-07:00').parseZone();
     m.startOf('M');
     assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'startOf(\'month\') across +1');
@@ -328,6 +332,10 @@ test('startOf across DST -1', function (assert) {
         }
     };
 
+    m = moment('2014-11-15T00:00:00-08:00').parseZone();
+    m.startOf('y');
+    assert.equal(m.format(), '2014-01-01T00:00:00-07:00', 'startOf(\'year\') across -1');
+
     m = moment('2014-11-15T00:00:00-08:00').parseZone();
     m.startOf('M');
     assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'startOf(\'month\') across -1');