in src/providers/time.ts [7:93]
export function parseUTC(value: string): number {
if (!value) {
throw new Error('invalid UTC format time string');
}
if (value.length === 20) {
// 2024-08-30T07:03:06Z
if (value[4] !== '-' || value[7] !== '-' || value[10] !== 'T' || value[13] !== ':' || value[16] !== ':' || value[19] !== 'Z') {
throw new Error('invalid UTC format date string');
}
} else if (value.length === 24) {
// 2024-08-30T07:03:06.117Z
if (value[4] !== '-' || value[7] !== '-' || value[10] !== 'T' || value[13] !== ':' || value[16] !== ':' || value[19] !== '.' || value[23] !== 'Z') {
throw new Error('invalid UTC format date string');
}
} else {
throw new Error('invalid UTC format time string');
}
const yearStr = value.slice(0, 4);
const year = Number.parseInt(yearStr, 10);
if (isNaN(year)) {
throw new Error('invalid year string');
}
const monthStr = value.slice(5, 7);
const month = Number.parseInt(monthStr, 10);
if (isNaN(month)) {
throw new Error('invalid month string');
}
if (month < 1 || month > 12) {
throw new Error('invalid month value');
}
const dateStr = value.slice(8, 10);
const date = Number.parseInt(dateStr, 10);
if (isNaN(date)) {
throw new Error('invalid date string');
}
if (date < 1 || date > 31) {
throw new Error('invalid date value');
}
const hoursStr = value.slice(11, 13);
const hours = Number.parseInt(hoursStr, 10);
if (isNaN(hours)) {
throw new Error('invalid hours string');
}
if (hours < 0 || hours > 24) {
throw new Error('invalid hours value');
}
const minutesStr = value.slice(14, 16);
const minutes = Number.parseInt(minutesStr, 10);
if (isNaN(minutes)) {
throw new Error('invalid minutes string');
}
if (minutes < 0 || minutes > 60) {
throw new Error('invalid minutes value');
}
const secondsStr = value.slice(17, 19);
const seconds = Number.parseInt(secondsStr, 10);
if (isNaN(seconds)) {
throw new Error('invalid seconds string');
}
if (seconds < 0 || seconds > 60) {
throw new Error('invalid seconds value');
}
if (value.length === 24) {
const msStr = value.slice(20, 23);
const ms = Number.parseInt(msStr, 10);
if (isNaN(ms)) {
throw new Error('invalid ms string');
}
return Date.UTC(year, month - 1, date, hours, minutes, seconds, ms);
}
return Date.UTC(year, month - 1, date, hours, minutes, seconds);
}