first commit
This commit is contained in:
45
calcom/packages/lib/parse-zone.ts
Normal file
45
calcom/packages/lib/parse-zone.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import dayjs from "@calcom/dayjs";
|
||||
|
||||
const ISO8601_OFFSET_FORMAT = /^(.*)([+-])(\d{2}):(\d{2})|(Z)$/;
|
||||
|
||||
// @see https://github.com/iamkun/dayjs/issues/651#issuecomment-763033265
|
||||
// decorates dayjs in order to keep the utcOffset of the given date string
|
||||
// ; natively dayjs auto-converts to local time & losing utcOffset info.
|
||||
export function parseZone(
|
||||
date?: dayjs.ConfigType,
|
||||
format?: dayjs.OptionType,
|
||||
locale?: string,
|
||||
strict?: boolean
|
||||
) {
|
||||
if (typeof date !== "string") {
|
||||
return dayjs(date, format, locale, strict);
|
||||
}
|
||||
const match = date.match(ISO8601_OFFSET_FORMAT);
|
||||
if (match === null) {
|
||||
return;
|
||||
}
|
||||
if (match[0] === "Z") {
|
||||
return dayjs(
|
||||
date,
|
||||
{
|
||||
utc: true,
|
||||
...(typeof format === "string" ? { format } : { ...format }),
|
||||
},
|
||||
locale,
|
||||
strict
|
||||
);
|
||||
}
|
||||
const [, dateTime, sign, tzHour, tzMinute] = match;
|
||||
const uOffset: number = parseInt(tzHour) * 60 + parseInt(tzMinute, 10);
|
||||
const offset = sign === "+" ? uOffset : -uOffset;
|
||||
|
||||
return dayjs(
|
||||
dateTime,
|
||||
{
|
||||
$offset: offset,
|
||||
...(typeof format === "string" ? { format } : { ...format }),
|
||||
} as dayjs.OptionType & { $offset: number },
|
||||
locale,
|
||||
strict
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user