From 2f4035a6b76e7d2b378f58629f9c133172a3497a Mon Sep 17 00:00:00 2001 From: Fred Oranje Date: Mon, 24 Jun 2013 10:23:12 +0200 Subject: [PATCH] Made the getWeekYear method available publically and in the formatter. --- src/xdate.js | 19 ++++++++++++++++++- test/formatting.js | 10 ++++++++++ test/getters.js | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/xdate.js b/src/xdate.js index 0c6dcf2..948b6c7 100644 --- a/src/xdate.js +++ b/src/xdate.js @@ -303,6 +303,16 @@ proto.getUTCWeek = function() { }; +proto.getWeekYear = function() { + return _getWeekYear(curry(_getField, this, false)); +}; + + +proto.getUTCWeekYear = function() { + return _getWeekYear(curry(_getField, this, true)); +}; + + proto.setWeek = function(n, year) { _setWeek(this, n, year, false); return this; // for chaining @@ -339,6 +349,11 @@ function getWeek(year, month, date) { } +function _getWeekYear(getField) { + return getWeekYear(getField(FULLYEAR), getField(MONTH), getField(DATE)); +} + + function getWeekYear(year, month, date) { // get the year that the date's week # belongs to var d = new Date(UTC(year, month, date)); if (d < getWeek1(year)) { @@ -590,7 +605,9 @@ function getTokenReplacement(xdate, token, getField, getSetting, useUTC) { case 'zzz' : return useUTC ? 'Z' : _getTZString(xdate, token); case 'w' : return _getWeek(getField); case 'ww' : return zeroPad(_getWeek(getField)); - case 'S' : + case 'jj' : return (_getWeekYear(getField)+'').substring(2); + case 'jjjj' : return _getWeekYear(getField); + case 'S' : var d = getField(DATE); if (d > 10 && d < 20) return 'th'; return ['st', 'nd', 'rd'][d % 10 - 1] || 'th'; diff --git a/test/formatting.js b/test/formatting.js index 3bf3c88..e37a379 100644 --- a/test/formatting.js +++ b/test/formatting.js @@ -59,6 +59,16 @@ test("long names", function() { .toString('dddd, MMMM dd, yyyy') == "Saturday, November 05, 2011"; }); +test("week year, two digits", function() { + return new XDate(2012, 12, 31) + .toString('jj') == '13'; +}); + +test("week year, four digits", function() { + return new XDate(2012, 12, 31) + .toString('jjjj') == '2013'; +}); + test("ordinals", function() { return new XDate(2011, 1, 1).toString('dS') == "1st" && diff --git a/test/getters.js b/test/getters.js index 20c38d3..a541a53 100644 --- a/test/getters.js +++ b/test/getters.js @@ -69,3 +69,11 @@ test("getWeek/getUTCWeek mega-test", function() { } return true; }); + +test("getWeekYear", function() { + return new XDate(2012, 12, 31).getWeekYear() == 2013; +}); + +test("getUTCWeekYear", function() { + return new XDate(2012, 12, 31, 12, 30).getUTCWeekYear() == 2013; +}); \ No newline at end of file