Merge pull request #155 from JensSpanier/master

Fix Date to W3C string converter
This commit is contained in:
Alexander Cerutti
2023-08-09 19:30:39 +02:00
committed by GitHub
3 changed files with 7 additions and 30 deletions

View File

@@ -712,12 +712,12 @@ describe("PKPass", () => {
describe("expiration date", () => { describe("expiration date", () => {
it("should set a pass expiration date", () => { it("should set a pass expiration date", () => {
pkpass.setExpirationDate(new Date(2023, 3, 10)); pkpass.setExpirationDate(new Date("2023-04-09T17:00-07:00"));
const passjsonGenerated = getGeneratedPassJson(pkpass); const passjsonGenerated = getGeneratedPassJson(pkpass);
expect(passjsonGenerated.expirationDate).toBe( expect(passjsonGenerated.expirationDate).toBe(
"2023-04-10T00:00:00Z", "2023-04-10T00:00:00.000Z",
); );
}); });
@@ -808,11 +808,11 @@ describe("PKPass", () => {
describe("relevant date", () => { describe("relevant date", () => {
it("should set pass relevant date", () => { it("should set pass relevant date", () => {
pkpass.setRelevantDate(new Date(2023, 3, 10, 14, 15)); pkpass.setRelevantDate(new Date("2023-04-11T00:15+10:00"));
const passjsonGenerated = getGeneratedPassJson(pkpass); const passjsonGenerated = getGeneratedPassJson(pkpass);
expect(passjsonGenerated.relevantDate).toBe("2023-04-10T14:15:00Z"); expect(passjsonGenerated.relevantDate).toBe("2023-04-10T14:15:00.000Z");
}); });
it("should reset relevant date", () => { it("should reset relevant date", () => {

View File

@@ -32,8 +32,8 @@ describe("Utils", () => {
}); });
it("should convert a Date object to a valid W3C date", () => { it("should convert a Date object to a valid W3C date", () => {
expect(processDate(new Date(2020, 6, 1, 0, 0, 0, 0))).toBe( expect(processDate(new Date("2020-07-01T02:00+02:00"))).toBe(
"2020-07-01T00:00:00Z", "2020-07-01T00:00:00.000Z",
); );
}); });
}); });

View File

@@ -36,34 +36,11 @@ function dateToW3CString(date: Date) {
return undefined; return undefined;
} }
const paddedMonth = padMeTwo(date.getMonth() + 1);
const paddedDay = padMeTwo(date.getDate());
const paddedHour = padMeTwo(date.getHours());
const paddedMinutes = padMeTwo(date.getMinutes());
const paddedSeconds = padMeTwo(date.getSeconds());
/** /**
* Date.prototype.getTimezoneOffset returns the timezone UTC offset in
* minutes of the local machine.
*
* That value should then be used to calculate the effective timezone as
* string, but still that would be related to the machine and not to the
* specified date.
*
* For this reason we are completing date with "Z" TimeZoneDesignator (TZD)
* to say it to use local timezone.
*
* In the future we might think to integrate another parameter to represent
* a custom timezone.
*
* @see https://www.w3.org/TR/NOTE-datetime * @see https://www.w3.org/TR/NOTE-datetime
*/ */
return `${date.getFullYear()}-${paddedMonth}-${paddedDay}T${paddedHour}:${paddedMinutes}:${paddedSeconds}Z`; return date.toISOString();
}
function padMeTwo(original: string | number) {
return String(original).padStart(2, "0");
} }
/** /**