From ba345b1a2dfed6c5e967841a49dcc4a1190bdd7d Mon Sep 17 00:00:00 2001 From: Tim Wood Date: Fri, 19 Dec 2014 13:34:59 -0800 Subject: [PATCH 1/3] Failing tests for #135 --- tests/moment-timezone/needs-offset.js | 7 +++++++ tests/moment-timezone/parse.js | 28 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/tests/moment-timezone/needs-offset.js b/tests/moment-timezone/needs-offset.js index 5f2e81ad..5e5d9985 100644 --- a/tests/moment-timezone/needs-offset.js +++ b/tests/moment-timezone/needs-offset.js @@ -69,5 +69,12 @@ exports['needs-offset'] = { t.ok(!needsOffset(moment(new Date())), 'Parsing a date object does not need an offset.'); t.ok(!needsOffset(moment.utc(new Date())), 'Parsing a date object does not need an offset.'); t.done(); + }, + + 'Moment' : function (t) { + t.ok(!needsOffset( moment([2012]).clone() ), 'Cloned moments do not need an offset.'); + t.ok(!needsOffset( moment(1318781876406).clone() ), 'Cloned moments do not need an offset.'); + t.ok(!needsOffset( moment.tz([2012], "America/Los_Angeles").clone() ), 'Cloned moments do not need an offset.'); + t.done(); } }; diff --git a/tests/moment-timezone/parse.js b/tests/moment-timezone/parse.js index babd4e35..daac2639 100644 --- a/tests/moment-timezone/parse.js +++ b/tests/moment-timezone/parse.js @@ -205,7 +205,7 @@ exports.parse = { t.done(); }, - "check needsOffset in moment.tz" : function (t) { + "check needsOffset in moment.tz (America/Los_Angeles)" : function (t) { var name = "America/Los_Angeles", tests = [ [moment.tz([2012, 5, 1], name), "2012-06-01 00:00:00 -07:00", "[2012, 5, 1]"], @@ -213,7 +213,8 @@ exports.parse = { [moment.tz("2012-06-01 07:00:00+00:00", name), "2012-06-01 00:00:00 -07:00", "2012-06-01 00:00:00+00:00"], [moment.tz(1338534000000, name), "2012-06-01 00:00:00 -07:00", "1338534000000"], [moment.tz(new Date(1338534000000), name), "2012-06-01 00:00:00 -07:00", "new Date(1338534000000)"], - [moment.tz({y : 2012, M : 5, d : 1}, name), "2012-06-01 00:00:00 -07:00", "{y : 2012, M : 5, d : 1}"] + [moment.tz({y : 2012, M : 5, d : 1}, name), "2012-06-01 00:00:00 -07:00", "{y : 2012, M : 5, d : 1}"], + [moment.tz(moment.utc([2012, 5, 1, 7]), name), "2012-06-01 00:00:00 -07:00", "moment.utc([2012, 5, 1, 7])"] ], i, actual, message, expected; for (i = 0; i < tests.length; i++) { @@ -223,6 +224,29 @@ exports.parse = { t.equal(actual, expected, "Parsing " + message + " in America/Los_Angeles should equal " + expected); } + t.done(); + }, + + "check needsOffset in moment.tz (America/New_York)" : function (t) { + var name = "America/New_York", + tests = [ + [moment.tz([2012, 5, 1], name), "2012-06-01 00:00:00 -04:00", "[2012, 5, 1]"], + [moment.tz("2012-06-01", name), "2012-06-01 00:00:00 -04:00", "2012-06-01"], + [moment.tz("2012-06-01 04:00:00+00:00", name), "2012-06-01 00:00:00 -04:00", "2012-06-01 00:00:00+00:00"], + [moment.tz(1338523200000, name), "2012-06-01 00:00:00 -04:00", "1338534000000"], + [moment.tz(new Date(1338523200000), name), "2012-06-01 00:00:00 -04:00", "new Date(1338534000000)"], + [moment.tz({y : 2012, M : 5, d : 1}, name), "2012-06-01 00:00:00 -04:00", "{y : 2012, M : 5, d : 1}"], + [moment.tz(moment.utc([2012, 5, 1, 4]), name), "2012-06-01 00:00:00 -04:00", "moment.utc([2012, 5, 1, 4])"] + ], i, actual, message, expected; + + for (i = 0; i < tests.length; i++) { + actual = tests[i][0].format('YYYY-MM-DD HH:mm:ss Z'); + expected = tests[i][1]; + message = tests[i][2]; + t.equal(actual, expected, "Parsing " + message + " in America/New_York should equal " + expected); + } + t.done(); } + }; From fb4b63d21dc9e6af5cb17a0980b0a70b37da0796 Mon Sep 17 00:00:00 2001 From: Tim Wood Date: Fri, 19 Dec 2014 13:47:44 -0800 Subject: [PATCH 2/3] Remove needsOffset tests for cloned moments. --- tests/moment-timezone/needs-offset.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/moment-timezone/needs-offset.js b/tests/moment-timezone/needs-offset.js index 5e5d9985..5f2e81ad 100644 --- a/tests/moment-timezone/needs-offset.js +++ b/tests/moment-timezone/needs-offset.js @@ -69,12 +69,5 @@ exports['needs-offset'] = { t.ok(!needsOffset(moment(new Date())), 'Parsing a date object does not need an offset.'); t.ok(!needsOffset(moment.utc(new Date())), 'Parsing a date object does not need an offset.'); t.done(); - }, - - 'Moment' : function (t) { - t.ok(!needsOffset( moment([2012]).clone() ), 'Cloned moments do not need an offset.'); - t.ok(!needsOffset( moment(1318781876406).clone() ), 'Cloned moments do not need an offset.'); - t.ok(!needsOffset( moment.tz([2012], "America/Los_Angeles").clone() ), 'Cloned moments do not need an offset.'); - t.done(); } }; From 6d0fe761b8f98126631b0e6c3a4659c4744fdee9 Mon Sep 17 00:00:00 2001 From: Tim Wood Date: Fri, 19 Dec 2014 13:49:03 -0800 Subject: [PATCH 3/3] Don't add an offset to timezone moments that were created from cloned moments. --- moment-timezone.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/moment-timezone.js b/moment-timezone.js index 870e1eb8..54caac8f 100644 --- a/moment-timezone.js +++ b/moment-timezone.js @@ -302,13 +302,13 @@ moment.tz namespace ************************************/ - function tz () { + function tz (input) { var args = Array.prototype.slice.call(arguments, 0, -1), name = arguments[arguments.length - 1], zone = getZone(name), out = moment.utc.apply(null, args); - if (zone && needsOffset(out)) { + if (zone && !moment.isMoment(input) && needsOffset(out)) { out.add(zone.parse(out), 'minutes'); }