date-time-function
Version:
📆 A simple Node.js date utility helper using moment + moment-timezone
460 lines (450 loc) • 14.8 kB
JavaScript
const moment = require('moment');
const momenttimezone = require('moment-timezone');
const dateFormate = (startDate, endDate, time = false) => {
if (startDate && endDate) {
if (moment(startDate).format('MMM Do') !== moment(endDate).format('MMM Do')) {
if (moment(startDate).format('YYYY') !== moment(endDate).format('YYYY')) {
return `${moment(startDate).format('MMM D YYYY')} - ${moment(endDate).format('MMM D YYYY')}`;
} else if (moment(startDate).format('MMM') === moment(endDate).format('MMM')) {
return `${moment(startDate).format('MMM D')} - ${moment(endDate).format('D, YYYY')}`;
} else {
return `${moment(startDate).format('MMM D')} - ${moment(endDate).format('MMM D, YYYY')}`;
}
} else {
return `${moment(startDate).format('MMM Do YYYY')}`;
}
} else if (time) {
return `${moment(startDate).format('MMM D YYYY, h:mm A')}`;
} else {
return `${moment(startDate).format('MMM D YYYY')}`;
}
};
const localFormate = (date, timeZone) => {
const momentZone = momenttimezone.tz.guess();
if (date && timeZone) {
const utcDate = date;
const convertedDate = momenttimezone(utcDate).tz(timeZone);
const formattedDate = convertedDate.format('YYYY-MM-DDTHH:mm:ss');
return formattedDate;
} else {
const utcDate = date;
const convertedDate = momenttimezone(utcDate).tz(momentZone);
const formattedDate = convertedDate.format('YYYY-MM-DDTHH:mm:ss');
return formattedDate;
}
};
const hasNumber = (string) => /\d/.test(string);
const timeZoneFormate = (date, timeZone) => {
const momentZone = momenttimezone.tz.guess();
if (timeZone) {
const utcDate = date;
const convertedDate = momenttimezone(utcDate).tz(timeZone);
const istAbbreviation = convertedDate.format('z');
const customTimezoneName = timezoneAbbreviationMap[timeZone] || '';
if (hasNumber(istAbbreviation)) {
return customTimezoneName;
} else {
return istAbbreviation;
}
} else {
const utcDate = date;
const convertedDate = momenttimezone(utcDate).tz(momentZone);
const istAbbreviation = convertedDate.format('z');
const customTimezoneName = timezoneAbbreviationMap[momentZone] || '';
if (hasNumber(istAbbreviation)) {
return customTimezoneName;
} else {
return istAbbreviation;
}
}
};
const dateTime = async () => {
return new Date().toISOString();
};
const timezoneAbbreviationMap = {
'Africa/Abidjan': 'GMT',
'Africa/Accra': 'GMT',
'Africa/Addis_Ababa': 'EAT',
'Africa/Algiers': 'CET',
'Africa/Asmara': 'EAT',
'Africa/Bamako': 'GMT',
'Africa/Bangui': 'WAT',
'Africa/Banjul': 'GMT',
'Africa/Bissau': 'GMT',
'Africa/Blantyre': 'CAT',
'Africa/Brazzaville': 'WAT',
'Africa/Bujumbura': 'CAT',
'Africa/Cairo': 'EET',
'Africa/Casablanca': 'WEST',
'Africa/Ceuta': 'CET',
'Africa/Conakry': 'GMT',
'Africa/Dakar': 'GMT',
'Africa/Dar_es_Salaam': 'EAT',
'Africa/Djibouti': 'EAT',
'Africa/Douala': 'WAT',
'Africa/El_Aaiun': 'WEST',
'Africa/Freetown': 'GMT',
'Africa/Gaborone': 'CAT',
'Africa/Harare': 'CAT',
'Africa/Johannesburg': 'SAST',
'Africa/Juba': 'EAT',
'Africa/Kampala': 'EAT',
'Africa/Khartoum': 'EAT',
'Africa/Kigali': 'CAT',
'Africa/Kinshasa': 'WAT',
'Africa/Lagos': 'WAT',
'Africa/Libreville': 'WAT',
'Africa/Lome': 'GMT',
'Africa/Luanda': 'WAT',
'Africa/Lubumbashi': 'CAT',
'Africa/Lusaka': 'CAT',
'Africa/Malabo': 'WAT',
'Africa/Maputo': 'CAT',
'Africa/Maseru': 'SAST',
'Africa/Mbabane': 'SAST',
'Africa/Mogadishu': 'EAT',
'Africa/Monrovia': 'GMT',
'Africa/Nairobi': 'EAT',
'Africa/Ndjamena': 'WAT',
'Africa/Niamey': 'WAT',
'Africa/Nouakchott': 'GMT',
'Africa/Ouagadougou': 'GMT',
'Africa/Porto-Novo': 'WAT',
'Africa/Sao_Tome': 'GMT',
'Africa/Tripoli': 'EET',
'Africa/Tunis': 'CET',
'Africa/Windhoek': 'CAT',
'America/Adak': 'HDT',
'America/Anchorage': 'AKDT',
'America/Anguilla': 'AST',
'America/Antigua': 'AST',
'America/Araguaina': 'BRT',
'America/Argentina/Buenos_Aires': 'ART',
'America/Argentina/Catamarca': 'ART',
'America/Argentina/ComodRivadavia': 'ART',
'America/Argentina/Cordoba': 'ART',
'America/Argentina/Jujuy': 'ART',
'America/Argentina/La_Rioja': 'ART',
'America/Argentina/Mendoza': 'ART',
'America/Argentina/Rio_Gallegos': 'ART',
'America/Argentina/Salta': 'ART',
'America/Argentina/San_Juan': 'ART',
'America/Argentina/San_Luis': 'ART',
'America/Argentina/Tucuman': 'ART',
'America/Argentina/Ushuaia': 'ART',
'America/Aruba': 'AST',
'America/Asuncion': 'PYT',
'America/Atikokan': 'EST',
'America/Bahia': 'BRT',
'America/Bahia_Banderas': 'CDT',
'America/Barbados': 'AST',
'America/Belem': 'BRT',
'America/Belize': 'CST',
'America/Blanc-Sablon': 'AST',
'America/Boa_Vista': 'AMT',
'America/Bogota': 'COT',
'America/Boise': 'MDT',
'America/Buenos_Aires': 'ART',
'America/Cambridge_Bay': 'MDT',
'America/Campo_Grande': 'AMT',
'America/Cancun': 'EST',
'America/Caracas': 'VET',
'America/Catamarca': 'ART',
'America/Cayenne': 'GFT',
'America/Cayman': 'EST',
'America/Chicago': 'CDT',
'America/Chihuahua': 'MDT',
'America/Coral_Harbour': 'EST',
'America/Cordoba': 'ART',
'America/Costa_Rica': 'CST',
'America/Creston': 'MST',
'America/Cuiaba': 'AMT',
'America/Curacao': 'AST',
'America/Danmarkshavn': 'WET',
'America/Dawson': 'PDT',
'America/Dawson_Creek': 'MST',
'America/Denver': 'MDT',
'America/Detroit': 'EDT',
'America/Dominica': 'AST',
'America/Edmonton': 'MDT',
'America/Eirunepe': 'ACT',
'America/El_Salvador': 'CST',
'America/Ensenada': 'PDT',
'America/Fort_Nelson': 'MST',
'America/Fort_Wayne': 'EDT',
'America/Fortaleza': 'BRT',
'America/Glace_Bay': 'ADT',
'America/Godthab': 'WGT',
'America/Goose_Bay': 'ADT',
'America/Grand_Turk': 'EDT',
'America/Grenada': 'AST',
'America/Guadeloupe': 'AST',
'America/Guatemala': 'CST',
'America/Guayaquil': 'ECT',
'America/Guyana': 'GYT',
'America/Halifax': 'ADT',
'America/Havana': 'CDT',
'America/Hermosillo': 'MST',
'America/Indiana/Indianapolis': 'EDT',
'America/Indiana/Knox': 'CDT',
'America/Indiana/Marengo': 'EDT',
'America/Indiana/Petersburg': 'EDT',
'America/Indiana/Tell_City': 'CDT',
'America/Indiana/Vevay': 'EDT',
'America/Indiana/Vincennes': 'EDT',
'America/Indiana/Winamac': 'EDT',
'America/Indianapolis': 'EDT',
'America/Inuvik': 'MDT',
'America/Iqaluit': 'EDT',
'America/Jamaica': 'EST',
'America/Jujuy': 'ART',
'America/Juneau': 'AKDT',
'America/Kentucky/Louisville': 'EDT',
'America/Kentucky/Monticello': 'EDT',
'America/Knox_IN': 'CDT',
'America/Kralendijk': 'AST',
'America/La_Paz': 'BOT',
'America/Lima': 'PET',
'America/Los_Angeles': 'PDT',
'America/Louisville': 'EDT',
'America/Lower_Princes': 'AST',
'America/Maceio': 'BRT',
'America/Managua': 'CST',
'America/Manaus': 'AMT',
'America/Marigot': 'AST',
'America/Martinique': 'AST',
'America/Matamoros': 'CDT',
'America/Mazatlan': 'MDT',
'America/Mendoza': 'ART',
'America/Menominee': 'CDT',
'Antarctica/Casey': 'CAST',
'Antarctica/Davis': 'DAVT',
'Antarctica/DumontDUrville': 'DDUT',
'Antarctica/Macquarie': 'AEDT',
'Antarctica/Mawson': 'MAWT',
'Antarctica/McMurdo': 'NZDT',
'Antarctica/Palmer': 'CLT',
'Antarctica/Rothera': 'ROTT',
'Antarctica/Syowa': 'SYOT',
'Antarctica/Troll': 'UTC',
'Antarctica/Vostok': 'VOST',
'Asia/Aden': 'AST',
'Asia/Almaty': 'ALMT',
'Asia/Amman': 'EET',
'Asia/Anadyr': 'ANAT',
'Asia/Aqtau': 'AQTT',
'Asia/Aqtobe': 'AQTT',
'Asia/Ashgabat': 'TMT',
'Asia/Atyrau': 'AQTT',
'Asia/Baghdad': 'AST',
'Asia/Bahrain': 'AST',
'Asia/Baku': 'AZT',
'Asia/Bangkok': 'ICT',
'Asia/Barnaul': 'KRAT',
'Asia/Beirut': 'EET',
'Asia/Bishkek': 'KGT',
'Asia/Brunei': 'BNT',
'Asia/Chita': 'IRKT',
'Asia/Choibalsan': 'CHOT',
'Asia/Colombo': 'IST',
'Asia/Damascus': 'EET',
'Asia/Dhaka': 'BDT',
'Asia/Dili': 'TLT',
'Asia/Dubai': 'GST',
'Asia/Dushanbe': 'TJT',
'Asia/Famagusta': 'EET',
'Asia/Gaza': 'EET',
'Asia/Hebron': 'EET',
'Asia/Ho_Chi_Minh': 'ICT',
'Asia/Hong_Kong': 'HKT',
'Asia/Hovd': 'HOVT',
'Asia/Irkutsk': 'IRKT',
'Asia/Jakarta': 'WIB',
'Asia/Jayapura': 'WIT',
'Asia/Jerusalem': 'IST',
'Asia/Kabul': 'AFT',
'Asia/Kamchatka': 'PETT',
'Asia/Karachi': 'PKT',
'Asia/Kathmandu': 'NPT',
'Asia/Khandyga': 'YAKT',
'Asia/Kolkata': 'IST',
'Asia/Krasnoyarsk': 'KRAT',
'Asia/Kuala_Lumpur': 'MYT',
'Asia/Kuching': 'MYT',
'Asia/Kuwait': 'AST',
'Asia/Macau': 'CST',
'Asia/Magadan': 'MAGT',
'Asia/Makassar': 'WITA',
'Asia/Manila': 'PHT',
'Asia/Muscat': 'GST',
'Asia/Nicosia': 'EET',
'Asia/Novokuznetsk': 'KRAT',
'Asia/Novosibirsk': 'NOVT',
'Asia/Omsk': 'OMST',
'Asia/Oral': 'ORAT',
'Asia/Phnom_Penh': 'ICT',
'Asia/Pontianak': 'WIB',
'Asia/Pyongyang': 'KST',
'Asia/Qatar': 'AST',
'Asia/Qostanay': 'QYZT',
'Asia/Qyzylorda': 'QYZT',
'Asia/Riyadh': 'AST',
'Asia/Sakhalin': 'SAKT',
'Asia/Samarkand': 'UZT',
'Asia/Seoul': 'KST',
'Asia/Shanghai': 'CST',
'Asia/Singapore': 'SGT',
'Asia/Srednekolymsk': 'SRET',
'Asia/Taipei': 'CST',
'Asia/Tashkent': 'UZT',
'Asia/Tbilisi': 'GET',
'Asia/Tehran': 'IRST',
'Asia/Thimphu': 'BTT',
'Asia/Tokyo': 'JST',
'Asia/Tomsk': 'KRAT',
'Asia/Ulaanbaatar': 'ULAT',
'Asia/Urumqi': 'CST',
'Asia/Ust-Nera': 'VLAT',
'Asia/Vientiane': 'ICT',
'Asia/Vladivostok': 'VLAT',
'Asia/Yakutsk': 'YAKT',
'Asia/Yangon': 'MMT',
'Asia/Yekaterinburg': 'YEKT',
'Asia/Yerevan': 'AMT',
'Atlantic/Azores': 'AZOT',
'Atlantic/Bermuda': 'ADT',
'Atlantic/Canary': 'WET',
'Atlantic/Cape_Verde': 'CVT',
'Atlantic/Faroe': 'WET',
'Atlantic/Madeira': 'WET',
'Atlantic/Reykjavik': 'GMT',
'Atlantic/South_Georgia': 'GST',
'Atlantic/St_Helena': 'GMT',
'Atlantic/Stanley': 'FKST',
'Australia/Adelaide': 'ACDT',
'Australia/Brisbane': 'AEST',
'Australia/Broken_Hill': 'ACDT',
'Australia/Currie': 'AEST',
'Australia/Darwin': 'ACST',
'Australia/Eucla': 'ACWST',
'Australia/Hobart': 'AEST',
'Australia/Lindeman': 'AEST',
'Australia/Lord_Howe': 'LHDT',
'Australia/Melbourne': 'AEST',
'Australia/Perth': 'AWST',
'Australia/Sydney': 'AEST',
'Europe/Amsterdam': 'CET',
'Europe/Andorra': 'CET',
'Europe/Astrakhan': 'MSK',
'Europe/Athens': 'EET',
'Europe/Belgrade': 'CET',
'Europe/Berlin': 'CET',
'Europe/Bratislava': 'CET',
'Europe/Brussels': 'CET',
'Europe/Bucharest': 'EET',
'Europe/Budapest': 'CET',
'Europe/Busingen': 'CET',
'Europe/Chisinau': 'EET',
'Europe/Copenhagen': 'CET',
'Europe/Dublin': 'GMT',
'Europe/Gibraltar': 'CET',
'Europe/Guernsey': 'GMT',
'Europe/Helsinki': 'EET',
'Europe/Isle_of_Man': 'GMT',
'Europe/Istanbul': 'TRT',
'Europe/Jersey': 'GMT',
'Europe/Kaliningrad': 'EET',
'Europe/Kiev': 'EET',
'Europe/Kirov': 'MSK',
'Europe/Lisbon': 'WET',
'Europe/Ljubljana': 'CET',
'Europe/London': 'GMT',
'Europe/Luxembourg': 'CET',
'Europe/Madrid': 'CET',
'Europe/Malta': 'CET',
'Europe/Mariehamn': 'EET',
'Europe/Minsk': 'FET',
'Europe/Monaco': 'CET',
'Europe/Moscow': 'MSK',
'Europe/Oslo': 'CET',
'Europe/Paris': 'CET',
'Europe/Podgorica': 'CET',
'Europe/Prague': 'CET',
'Europe/Riga': 'EET',
'Europe/Rome': 'CET',
'Europe/Samara': 'SAMT',
'Europe/San_Marino': 'CET',
'Europe/Sarajevo': 'CET',
'Europe/Saratov': 'MSK',
'Europe/Simferopol': 'MSK',
'Europe/Skopje': 'CET',
'Europe/Sofia': 'EET',
'Europe/Stockholm': 'CET',
'Europe/Tallinn': 'EET',
'Europe/Tirane': 'CET',
'Europe/Ulyanovsk': 'MSK',
'Europe/Uzhgorod': 'EET',
'Europe/Vaduz': 'CET',
'Europe/Vatican': 'CET',
'Europe/Vienna': 'CET',
'Europe/Vilnius': 'EET',
'Europe/Volgograd': 'MSK',
'Europe/Warsaw': 'CET',
'Europe/Zagreb': 'CET',
'Europe/Zaporozhye': 'EET',
'Europe/Zurich': 'CET',
'Indian/Chagos': 'IOT',
'Indian/Cocos': 'CCT',
'Indian/Christmas': 'CXT',
'Indian/Maldives': 'MVT',
'Indian/Mauritius': 'MUT',
'Indian/Reunion': 'RET',
'Indian/Comoro': 'EAT',
'Indian/Mahe': 'SCT',
'Indian/Antananarivo': 'EAT',
'Pacific/Apia': 'WST',
'Pacific/Auckland': 'NZST',
'Pacific/Bougainville': 'BST',
'Pacific/Chatham': 'CHAST',
'Pacific/Chuuk': 'CHUT',
'Pacific/Easter': 'EAST',
'Pacific/Efate': 'VUT',
'Pacific/Enderbury': 'PHOT',
'Pacific/Fakaofo': 'TKT',
'Pacific/Fiji': 'FJST',
'Pacific/Funafuti': 'TVT',
'Pacific/Galapagos': 'GALT',
'Pacific/Gambier': 'GAMT',
'Pacific/Guadalcanal': 'SBT',
'Pacific/Guam': 'ChST',
'Pacific/Honolulu': 'HST',
'Pacific/Johnston': 'HST',
'Pacific/Kiritimati': 'LINT',
'Pacific/Kosrae': 'KOST',
'Pacific/Kwajalein': 'MHT',
'Pacific/Majuro': 'MHT',
'Pacific/Marquesas': 'MART',
'Pacific/Midway': 'SST',
'Pacific/Nauru': 'NRT',
'Pacific/Niue': 'NUT',
'Pacific/Norfolk': 'NFT',
'Pacific/Noumea': 'NCT',
'Pacific/Pago_Pago': 'SST',
'Pacific/Palau': 'PWT',
'Pacific/Pitcairn': 'PST',
'Pacific/Pohnpei': 'PONT',
'Pacific/Port_Moresby': 'PGT',
'Pacific/Rarotonga': 'CKT',
'Pacific/Saipan': 'ChST',
'Pacific/Tahiti': 'TAHT',
'Pacific/Tarawa': 'GILT',
'Pacific/Tongatapu': 'TOT',
'Pacific/Wake': 'WAKT',
'Pacific/Wallis': 'WFT'
};
module.exports = {
dateFormate,
localFormate,
timeZoneFormate,
dateTime
};