deanpillow
deanpillow

Reputation: 121

How to get the current time based of a UTC time using moment js

I have the following list of array that populates world timezones enter image description here

how do i get whats the actual time based on what a user selected.

if the user selects the first option (UTC-12:00) International Date Line West how do i get the current time ?

Upvotes: 1

Views: 2036

Answers (1)

Terry Lennox
Terry Lennox

Reputation: 30725

You can get the time in another timezone using Moment Timezone, we can call moment.tz(timezone) to get the time in that timezone. However moment requires an IANA timezone and you have a list of Windows timezones.

We can convert using the package windows-iana, I've created a function findIANATimezone() that finds the corresponding IANA timezone for a Windows timezone.

In this case, we'll find the equivalent IANA timezone for the examples below, then use moment.tz() to get the current time in that timezone.

NB: We can't simply add the UTC offset for a timezone, since this will vary by the time of year.

// Some examples...
let timezones = [
  {
    "id": "Dateline Standard Time",
    "name": "(UTC-12:00) International Date Line West",
  },
  {
    "id": "Pacific Standard Time",
    "name": "(UTC-08:00) Pacific Time (US & Canada)",
  },
  {
    "id": "W. Europe Standard Time",
    "name": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
  },
]

console.log(`Timezone                  Current Time`); 
for(let timezone of timezones) {
    console.log(timezone.id.padEnd(26, ' ') + getCurrentTime(timezone.id).format('YYYY-MM-DD HH:mm'))
}

function getCurrentTime(timezoneId) { 
    let ianaTimezone = findIANATimezone(timezoneId);
    if (!ianaTimezone) { 
        return null;
    }
    return moment.tz(ianaTimezone);
}

function findIANATimezone(id) {
    const timeZones = [
      { id: 'Dateline Standard Time', iana: 'Etc/GMT+12' },
      { id: 'Samoa Standard Time', iana: 'Pacific/Apia' },
      { id: 'Hawaiian Standard Time', iana: 'Pacific/Honolulu' },
      { id: 'Alaskan Standard Time', iana: 'America/Anchorage' },
      { id: 'Pacific Standard Time', iana: 'America/Los_Angeles' },
      { id: 'Pacific Standard Time (Mexico)', iana: 'America/Tijuana' },
      { id: 'US Mountain Standard Time', iana: 'America/Phoenix' },
      { id: 'Mountain Standard Time (Mexico)', iana: 'America/Chihuahua' },
      { id: 'Mountain Standard Time', iana: 'America/Denver' },
      { id: 'Central America Standard Time', iana: 'America/Guatemala' },
      { id: 'Central Standard Time', iana: 'America/Chicago' },
      { id: 'Central Standard Time (Mexico)', iana: 'America/Mexico_City' },
      { id: 'Canada Central Standard Time', iana: 'America/Regina' },
      { id: 'SA Pacific Standard Time', iana: 'America/Bogota' },
      { id: 'Eastern Standard Time', iana: 'America/New_York' },
      { id: 'US Eastern Standard Time', iana: 'America/Indianapolis' },
      { id: 'Venezuela Standard Time', iana: 'America/Caracas' },
      { id: 'Atlantic Standard Time', iana: 'America/Halifax' },
      { id: 'SA Western Standard Time', iana: 'America/La_Paz' },
      { id: 'Central Brazilian Standard Time', iana: 'America/Cuiaba' },
      { id: 'Pacific SA Standard Time', iana: 'America/Santiago' },
      { id: 'Newfoundland Standard Time', iana: 'America/St_Johns' },
      { id: 'E. South America Standard Time', iana: 'America/Sao_Paulo' },
      { id: 'Argentina Standard Time', iana: 'America/Buenos_Aires' },
      { id: 'SA Eastern Standard Time', iana: 'America/Cayenne' },
      { id: 'Greenland Standard Time', iana: 'America/Godthab' },
      { id: 'Montevideo Standard Time', iana: 'America/Montevideo' },
      { id: 'Azores Standard Time', iana: 'Atlantic/Azores' },
      { id: 'Cape Verde Standard Time', iana: 'Atlantic/Cape_Verde' },
      { id: 'Morocco Standard Time', iana: 'Africa/Casablanca' },
      { id: 'GMT Standard Time', iana: 'Europe/London' },
      { id: 'Greenwich Standard Time', iana: 'Atlantic/Reykjavik' },
      { id: 'UTC', iana: 'UTC' },
      { id: 'W. Europe Standard Time', iana: 'Europe/Berlin' },
      { id: 'Central Europe Standard Time', iana: 'Europe/Budapest' },
      { id: 'Romance Standard Time', iana: 'Europe/Paris' },
      { id: 'Central European Standard Time', iana: 'Europe/Warsaw' },
      { id: 'W. Central Africa Standard Time', iana: 'Africa/Lagos' },
      { id: 'Jordan Standard Time', iana: 'Asia/Amman' },
      { id: 'GTB Standard Time', iana: 'Europe/Bucharest' },
      { id: 'Middle East Standard Time', iana: 'Asia/Beirut' },
      { id: 'Egypt Standard Time', iana: 'Africa/Cairo' },
      { id: 'South Africa Standard Time', iana: 'Africa/Johannesburg' },
      { id: 'FLE Standard Time', iana: 'Europe/Kiev' },
      { id: 'Israel Standard Time', iana: 'Asia/Jerusalem' },
      { id: 'E. Europe Standard Time', iana: 'Europe/Chisinau' },
      { id: 'Namibia Standard Time', iana: 'Africa/Windhoek' },
      { id: 'Arabic Standard Time', iana: 'Asia/Baghdad' },
      { id: 'Arab Standard Time', iana: 'Asia/Riyadh' },
      { id: 'Russian Standard Time', iana: 'Europe/Moscow' },
      { id: 'E. Africa Standard Time', iana: 'Africa/Nairobi' },
      { id: 'Georgian Standard Time', iana: 'Asia/Tbilisi' },
      { id: 'Iran Standard Time', iana: 'Asia/Tehran' },
      { id: 'Arabian Standard Time', iana: 'Asia/Dubai' },
      { id: 'Azerbaijan Standard Time', iana: 'Asia/Baku' },
      { id: 'Mauritius Standard Time', iana: 'Indian/Mauritius' },
      { id: 'Caucasus Standard Time', iana: 'Asia/Yerevan' },
      { id: 'Afghanistan Standard Time', iana: 'Asia/Kabul' },
      { id: 'Ekaterinburg Standard Time', iana: 'Asia/Yekaterinburg' },
      { id: 'Pakistan Standard Time', iana: 'Asia/Karachi' },
      { id: 'West Asia Standard Time', iana: 'Asia/Tashkent' },
      { id: 'India Standard Time', iana: 'Asia/Calcutta' },
      { id: 'Sri Lanka Standard Time', iana: 'Asia/Colombo' },
      { id: 'Nepal Standard Time', iana: 'Asia/Katmandu' },
      { id: 'N. Central Asia Standard Time', iana: 'Asia/Novosibirsk' },
      { id: 'Central Asia Standard Time', iana: 'Asia/Almaty' },
      { id: 'Myanmar Standard Time', iana: 'Asia/Rangoon' },
      { id: 'SE Asia Standard Time', iana: 'Asia/Bangkok' },
      { id: 'North Asia Standard Time', iana: 'Asia/Krasnoyarsk' },
      { id: 'China Standard Time', iana: 'Asia/Shanghai' },
      { id: 'North Asia East Standard Time', iana: 'Asia/Irkutsk' },
      { id: 'Singapore Standard Time', iana: 'Asia/Singapore' },
      { id: 'W. Australia Standard Time', iana: 'Australia/Perth' },
      { id: 'Taipei Standard Time', iana: 'Asia/Taipei' },
      { id: 'Tokyo Standard Time', iana: 'Asia/Tokyo' },
      { id: 'Korea Standard Time', iana: 'Asia/Seoul' },
      { id: 'Yakutsk Standard Time', iana: 'Asia/Yakutsk' },
      { id: 'Cen. Australia Standard Time', iana: 'Australia/Adelaide' },
      { id: 'AUS Central Standard Time', iana: 'Australia/Darwin' },
      { id: 'E. Australia Standard Time', iana: 'Australia/Brisbane' },
      { id: 'AUS Eastern Standard Time', iana: 'Australia/Sydney' },
      { id: 'West Pacific Standard Time', iana: 'Pacific/Port_Moresby' },
      { id: 'Tasmania Standard Time', iana: 'Australia/Hobart' },
      { id: 'Vladivostok Standard Time', iana: 'Asia/Vladivostok' },
      { id: 'Central Pacific Standard Time', iana: 'Pacific/Guadalcanal' },
      { id: 'New Zealand Standard Time', iana: 'Pacific/Auckland' },
      { id: 'Fiji Standard Time', iana: 'Pacific/Fiji' },
      { id: 'Tonga Standard Time', iana: 'Pacific/Tongatapu' }
    ]
    const tz = timeZones.find(tz => tz.id === id);
    return tz ? tz.iana: null;
}
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data-1970-2030.min.js"></script>

Upvotes: 2

Related Questions