From 1cac7b4f0265333ede10d9b018a7b0149ad4fd85 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 6 Jan 2022 22:04:04 +0800 Subject: [PATCH 1/3] Fixes timezone format --- lib/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index 9f8de68..2cd8e3a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -27,7 +27,7 @@ function offset(timezoneOffset) { if (m.length === 1) { m = "0" + m; } - return timezoneOffset < 0 ? "+" + h + m : "-" + h + m; + return timezoneOffset === 0 ? "Z" : (timezoneOffset < 0 ? "+" : "-") + h + ":" + m; } function asString(format, date) { @@ -126,11 +126,14 @@ function extractDateParts(pattern, str, missingValuesDate) { }, { pattern: /O/, - regexp: "[+-]\\d{3,4}|Z", + regexp: "[+-]\\d{1,2}:?\\d{2}?|Z", fn: function(date, value) { if (value === "Z") { value = 0; } + else { + value = value.replace(":", ""); + } var offset = Math.abs(value); var timezoneOffset = (value > 0 ? -1 : 1 ) * ((offset % 100) + Math.floor(offset / 100) * 60); // Per ISO8601 standard: UTC = local time - offset From 6e262aef593eb2147710be9fd9aa512ecc5ba406 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 8 Jan 2022 15:32:47 +0800 Subject: [PATCH 2/3] docs: updated README for timezone format --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e05b5ed..7320c8a 100644 --- a/README.md +++ b/README.md @@ -38,11 +38,11 @@ Format string can be anything, but the following letters will be replaced (and l * mm - `date.getMinutes()` * ss - `date.getSeconds()` * SSS - `date.getMilliseconds()` -* O - timezone offset in +hm format (note that time will still be local if displaying offset) +* O - timezone offset in ±hhmm format (note that time will still be local if displaying offset) Built-in formats: * `format.ISO8601_FORMAT` - `2017-03-14T14:10:20.391` (local time used) -* `format.ISO8601_WITH_TZ_OFFSET_FORMAT` - `2017-03-14T14:10:20.391+1100` (local + TZ used) +* `format.ISO8601_WITH_TZ_OFFSET_FORMAT` - `2017-03-14T14:10:20.391+11:00` (local + TZ used) * `format.DATETIME_FORMAT` - `14 03 2017 14:10:20.391` (local time used) * `format.ABSOLUTETIME_FORMAT` - `14:10:20.391` (local time used) From 289bf73503bf4b2de039dbd5413dfe3e1b0d6e2d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 13:20:34 +0800 Subject: [PATCH 3/3] Fixes tests for timezone format --- test/date_format-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/date_format-test.js b/test/date_format-test.js index 9bb228a..26e2120 100644 --- a/test/date_format-test.js +++ b/test/date_format-test.js @@ -35,7 +35,7 @@ describe('date_format', function() { // when tz offset is in the pattern, the date should be in local time dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, tzDate) - .should.eql('2010-01-11T14:31:30.005+1100'); + .should.eql('2010-01-11T14:31:30.005+11:00'); tzDate = createFixedDate(); tzDate.getTimezoneOffset = function () { @@ -43,7 +43,7 @@ describe('date_format', function() { }; dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, tzDate) - .should.eql('2010-01-11T14:31:30.005-0200'); + .should.eql('2010-01-11T14:31:30.005-02:00'); }); it('should provide a just-the-time format', function() { @@ -56,6 +56,6 @@ describe('date_format', function() { return 120; }; - dateFormat.asString('O.SSS.ss.mm.hh.dd.MM.yy', customDate).should.eql('-0200.005.30.31.14.11.01.10'); + dateFormat.asString('O.SSS.ss.mm.hh.dd.MM.yy', customDate).should.eql('-02:00.005.30.31.14.11.01.10'); }); });