@sildeswj/common-libraries
Version:
This is common libraries used for all refeed projects
167 lines • 7.51 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getYearMonthByTimezone = exports.getDateByTimezone = exports.parsePickupDateWithCountry = exports.getDateFormat = exports.getTodayByCountry = exports.getTomorrow = exports.getThisMonth = exports.getThisYear = exports.getToday = exports.getDayjsDate = exports.getStartAndEndDateFromYearAndMonth = exports.getYearMonth = exports.getEndDate = exports.getStartDate = exports.userLocale = void 0;
const dayjs_1 = __importDefault(require("dayjs"));
const utc_1 = __importDefault(require("dayjs/plugin/utc"));
const timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
const constants_1 = require("./constants");
dayjs_1.default.extend(utc_1.default);
dayjs_1.default.extend(timezone_1.default);
exports.userLocale = Intl.DateTimeFormat().resolvedOptions().locale;
// Helper function to get timezone from country code
const getTimezoneFromCountryCode = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const countryCodeUpper = countryCode.toUpperCase();
return constants_1.COUNTRY_TIME_ZONES[countryCodeUpper] || constants_1.DEFAULT_TIMEZONE;
};
const getStartDate = (date, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)(date).tz(tz).locale(exports.userLocale).startOf('day').utc().format();
};
exports.getStartDate = getStartDate;
const getEndDate = (date, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)(date).tz(tz).locale(exports.userLocale).endOf('day').utc().format();
};
exports.getEndDate = getEndDate;
const getYearMonth = (date, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return {
year: (0, dayjs_1.default)(date).tz(tz).locale(exports.userLocale).year(),
month: (0, dayjs_1.default)(date).tz(tz).locale(exports.userLocale).month() + 1,
};
};
exports.getYearMonth = getYearMonth;
const getStartAndEndDateFromYearAndMonth = (year, month, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
const startDate = (0, dayjs_1.default)()
.tz(tz)
.locale(exports.userLocale)
.year(year)
.month(month - 1)
.startOf('month')
.utc()
.format();
const endDate = (0, dayjs_1.default)()
.tz(tz)
.locale(exports.userLocale)
.year(year)
.month(month - 1)
.endOf('month')
.utc()
.format();
return { startDate, endDate };
};
exports.getStartAndEndDateFromYearAndMonth = getStartAndEndDateFromYearAndMonth;
const getDayjsDate = (date, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)(date).tz(tz).locale(exports.userLocale);
};
exports.getDayjsDate = getDayjsDate;
const getToday = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)().tz(tz).locale(exports.userLocale).utc().format();
};
exports.getToday = getToday;
const getThisYear = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)().tz(tz).locale(exports.userLocale).year();
};
exports.getThisYear = getThisYear;
const getThisMonth = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)().tz(tz).locale(exports.userLocale).month() + 1;
};
exports.getThisMonth = getThisMonth;
const getTomorrow = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
return (0, dayjs_1.default)().tz(tz).locale(exports.userLocale).add(1, 'day').utc().format();
};
exports.getTomorrow = getTomorrow;
const getTodayByCountry = (countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
const now = (0, dayjs_1.default)().tz(tz);
return now;
};
exports.getTodayByCountry = getTodayByCountry;
const getDateFormat = (locale, isTimeFormat = false) => {
const timeFormat = 'HH:mm';
const localeMap = {
ko: `YYYY.MM.DD`,
en: 'MM/DD/YYYY',
vn: 'DD/MM/YYYY',
jp: 'YYYY/MM/DD',
};
const dateFormat = localeMap[locale] || localeMap.en;
if (isTimeFormat) {
return `${dateFormat} ${timeFormat}`;
}
return dateFormat;
};
exports.getDateFormat = getDateFormat;
const parsePickupDateWithCountry = (pickupDate, countryCode = constants_1.COUNTRY_TIME_ZONES.KR) => {
const tz = getTimezoneFromCountryCode(countryCode);
let parsed;
try {
if (typeof pickupDate === 'number') {
const excelEpoch = (0, dayjs_1.default)('1899-12-30');
parsed = excelEpoch.add(pickupDate, 'day');
}
else if (typeof pickupDate === 'string') {
const dateStr = pickupDate.trim();
const formats = [
'YYYY-MM-DD', // 2025-08-20
'MM/DD/YYYY', // 08/20/2025 (US format)
'DD/MM/YYYY', // 20/08/2025 (EU format)
'YYYY/MM/DD', // 2025/08/20 (ISO-like)
'DD-MM-YYYY', // 20-08-2025
'MM-DD-YYYY', // 08-20-2025
'YYYY.MM.DD', // 2025.08.20
'DD.MM.YYYY', // 20.08.2025
'MMMM DD, YYYY', // August 20, 2025
'MMM DD, YYYY', // Aug 20, 2025
'DD MMMM YYYY', // 20 August 2025
'DD MMM YYYY', // 20 Aug 2025
];
for (const format of formats) {
parsed = (0, dayjs_1.default)(dateStr, format, true);
if (parsed.isValid())
break;
}
if (!parsed || !parsed.isValid()) {
parsed = (0, dayjs_1.default)(dateStr);
}
}
else if (pickupDate instanceof Date) {
parsed = (0, dayjs_1.default)(pickupDate);
}
else {
parsed = (0, dayjs_1.default)(pickupDate);
}
if (!parsed.isValid()) {
throw new Error(`Unable to parse date: ${pickupDate}`);
}
parsed = parsed.tz(tz).hour(12).minute(0).second(0).millisecond(0);
return parsed.utc().toDate();
}
catch (error) {
throw new Error(`Invalid pickupDate format: ${pickupDate}. Expected formats: YYYY-MM-DD, MM/DD/YYYY, DD/MM/YYYY, etc.`);
}
};
exports.parsePickupDateWithCountry = parsePickupDateWithCountry;
// All functions below are used with timezone
const getDateByTimezone = (date, timezone = constants_1.DEFAULT_TIMEZONE) => {
return (0, dayjs_1.default)(date).tz(timezone).startOf('day').toDate();
};
exports.getDateByTimezone = getDateByTimezone;
const getYearMonthByTimezone = (date, timezone = constants_1.DEFAULT_TIMEZONE) => {
const localDate = (0, dayjs_1.default)(date).tz(timezone);
return {
year: localDate.year(),
month: localDate.month() + 1, // dayjs months are 0-indexed
};
};
exports.getYearMonthByTimezone = getYearMonthByTimezone;
//# sourceMappingURL=dateFormat.js.map