Skip to content

Instantly share code, notes, and snippets.

@iegik
Last active December 8, 2023 09:02
Show Gist options
  • Save iegik/70a389c4d6508af018c25feaf897afc0 to your computer and use it in GitHub Desktop.
Save iegik/70a389c4d6508af018c25feaf897afc0 to your computer and use it in GitHub Desktop.

Date/Time

const date = new Date(Date.UTC(2020, 11, 20, 3, 23, 16, 738));
// Results below assume UTC timezone - your results may vary

// Specify default date formatting for language (locale)
console.log(new Intl.DateTimeFormat('en-US').format(date));
// expected output: "12/20/2020"
    
// Specify default date formatting for language with a fallback language (in this case Indonesian)
console.log(new Intl.DateTimeFormat(['ban', 'id']).format(date));
// expected output: "20/12/2020"
    
// Specify date and time format using "style" options (i.e. full, long, medium, short)
console.log(new Intl.DateTimeFormat('en-GB', { dateStyle: 'full', timeStyle: 'long' }).format(date));
// Expected output "Sunday, 20 December 2020 at 14:23:16 GMT+11"

// Specify time "HH:mm:ss.SSS" for input[type=time]
console.log(`${date.toLocaleTimeString('nu', { hour: '2-digit', minute: '2-digit', hour12: false })}.${date.getMilliseconds()}`)
// Expected output "14:23:16.123"
const daysBefore = (d1: Date, d2 = new Date()) => ~~((d2.getTime() - d1.getTime()) / 86400000);
var moment = require('moment-timezone');
const TIME_ZONE_CODES = {
'+02:00': 'Europe/Helsinki',
'+03:00': 'Europe/Moscow',
'+04:00': 'Europe/Samara',
'+05:00': 'Asia/Yekaterinburg',
'+06:00': 'Asia/Omsk',
'+07:00': 'Asia/Krasnoyarsk',
'+08:00': 'Asia/Irkutsk',
'+09:00': 'Asia/Yakutsk',
'+10:00': 'Asia/Vladivostok',
'+11:00': 'Asia/Magadan',
'+12:00': 'Asia/Kamchatka',
};
const getTimeZone = (date) => date.match(/[+-](\d+:\d+)$/)[0];
const getTimeZoneCode = (date) => TIME_ZONE_CODES[getTimeZone(date)] || '+02:00';
const TIME_ZONE_NAMES = {
'+02:00': 'МСК-1', // Калининградское время
'+03:00': 'МСК', // Московское время
'+04:00': 'МСК+1', // Самарское время
'+05:00': 'МСК+2', // Екатеринбургское время
'+06:00': 'МСК+3', // Омское время
'+07:00': 'МСК+4', // Красноярское время
'+08:00': 'МСК+5', // Иркутское время
'+09:00': 'МСК+6', // Якутское время
'+10:00': 'МСК+7', // Владивостокское время
'+11:00': 'МСК+8', // Магаданское время
'+12:00': 'МСК+9', // Камчатское время
};
const getTimeZoneName = date => TIME_ZONE_NAMES[date.format('Z')] || date.format('Z');
var serverTime = '2018-08-14T11:39:00+02:00'
var serverTimeZone = getTimeZone(serverTime)
var serverTimeZoneCode = timeZoneCodes[serverTimeZone];
var serverTimeZoneName = timeZoneNames[serverTimeZone];
moment.locale('ru');
moment.tz.setDefault(serverTimeZoneCode);
var now = moment();
console.log(`
${serverTimeZoneCode} - ${serverTimeZoneName}
${now.format('LLL, Z')}
${moment.tz(now, serverTimeZoneCode).format(`LLL, (${serverTimeZoneName})`)}
`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment