Juan Pablo Fernandez
Juan Pablo Fernandez

Reputation: 2546

How to get current hour in a specific timezone with nodejs?

I have the following timezones:

var timezones = [
  { value: '-12.0', str: '(GMT -12:00) Eniwetok, Kwajalein' },
  { value: '-11.0', str: '(GMT -11:00) Midway Island, Samoa' },
  { value: '-10.0', str: '(GMT -10:00) Hawaii' },
  { value: '-9.0', str: '(GMT -9:00) Alaska' },
  { value: '-8.0', str: '(GMT -8:00) Pacific Time (US & Canada)' },
  { value: '-7.0', str: '(GMT -7:00) Mountain Time (US & Canada)' },
  { value: '-6.0', str: '(GMT -6:00) Central Time (US & Canada), Mexico City' },
  { value: '-5.0', str: '(GMT -5:00) Eastern Time (US & Canada), Bogota, Lima' },
  { value: '-4.0', str: '(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz' },
  { value: '-3.5', str: '(GMT -3:30) Newfoundland' },
  { value: '-3.0', str: '(GMT -3:00) Brazil, Buenos Aires, Georgetown' },
  { value: '-2.0', str: '(GMT -2:00) Mid-Atlantic' },
  { value: '-1.0', str: '(GMT -1:00) Azores, Cape Verde Islands' },
  { value: '0.0', str: '(GMT) Western Europe Time, London, Lisbon, Casablanca' },
  { value: '+1.0', str: '(GMT +1:00) Brussels, Copenhagen, Madrid, Paris' },
  { value: '+2.0', str: '(GMT +2:00) Kaliningrad, South Africa' },
  { value: '+3.0', str: '(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg' },
  { value: '+3.5', str: '(GMT +3:30) Tehran' },
  { value: '+4.0', str: '(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi' },
  { value: '+4.5', str: '(GMT +4:30) Kabul' },
  { value: '+5.0', str: '(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent' },
  { value: '+5.5', str: '(GMT +5:30) Bombay, Calcutta, Madras, New Delhi' },
  { value: '+5.45', str: '(GMT +5:45) Kathmandu' },
  { value: '+6.0', str: '(GMT +6:00) Almaty, Dhaka, Colombo' },
  { value: '+7.0', str: '(GMT +7:00) Bangkok, Hanoi, Jakarta' },
  { value: '+8.0', str: '(GMT +8:00) Beijing, Perth, Singapore, Hong Kong' },
  { value: '+9.0', str: '(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk' },
  { value: '+9.5', str: '(GMT +9:30) Adelaide, Darwin' },
  { value: '+10.0', str: '(GMT +10:00) Eastern Australia, Guam, Vladivostok' },
  { value: '+11.0', str: '(GMT +11:00) Magadan, Solomon Islands, New Caledonia' },
  { value: '+12.0', str: '(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka' }
];

timezones.forEach(function(tz){
  console.log(tz.value);
  // Next how to calc current hour in the tz.value timezone ?
});

They go from -12 to 12. I need to loop the timezones and get the current hour for each timezone with nodejs. It is a script for a cronjob.

Upvotes: 1

Views: 8439

Answers (4)

aaditya
aaditya

Reputation: 773

You could use moment.js.First take out the time from the current timezone and the get the hours.

 let date = moment().tz('Asia/Kolkata').format('LLLL') 
 moment().get('hour');

Upvotes: 0

Gerrit van Huyssteen
Gerrit van Huyssteen

Reputation: 718

There is a great library called moment.js especially moment-timezone.js that will help you with timezones.

http://momentjs.com
http://momentjs.com/timezone/

All you need to do is add all the timezones that you require into an array and then loop through it.

Here is an example:

var moment = require('moment-timezone');

var timezones = ['Africa/Abidjan', 'Africa/Accra'];

timezones.forEach(function(timezone){
    var now = moment().utc();
    console.log(now.tz(timezone).toString());
});

EDIT:
Here is a link to all available timezones:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Upvotes: 2

Nehal J Wani
Nehal J Wani

Reputation: 16629

Without using any external dependency:

var timezones = [{
        value: '-12.0',
        str: '(GMT -12:00) Eniwetok, Kwajalein'
    },
    {
        value: '-11.0',
        str: '(GMT -11:00) Midway Island, Samoa'
    },
    {
        value: '-10.0',
        str: '(GMT -10:00) Hawaii'
    },
    {
        value: '-9.0',
        str: '(GMT -9:00) Alaska'
    },
    {
        value: '-8.0',
        str: '(GMT -8:00) Pacific Time (US & Canada)'
    },
    {
        value: '-7.0',
        str: '(GMT -7:00) Mountain Time (US & Canada)'
    },
    {
        value: '-6.0',
        str: '(GMT -6:00) Central Time (US & Canada), Mexico City'
    },
    {
        value: '-5.0',
        str: '(GMT -5:00) Eastern Time (US & Canada), Bogota, Lima'
    },
    {
        value: '-4.0',
        str: '(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz'
    },
    {
        value: '-3.5',
        str: '(GMT -3:30) Newfoundland'
    },
    {
        value: '-3.0',
        str: '(GMT -3:00) Brazil, Buenos Aires, Georgetown'
    },
    {
        value: '-2.0',
        str: '(GMT -2:00) Mid-Atlantic'
    },
    {
        value: '-1.0',
        str: '(GMT -1:00) Azores, Cape Verde Islands'
    },
    {
        value: '0.0',
        str: '(GMT) Western Europe Time, London, Lisbon, Casablanca'
    },
    {
        value: '+1.0',
        str: '(GMT +1:00) Brussels, Copenhagen, Madrid, Paris'
    },
    {
        value: '+2.0',
        str: '(GMT +2:00) Kaliningrad, South Africa'
    },
    {
        value: '+3.0',
        str: '(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg'
    },
    {
        value: '+3.5',
        str: '(GMT +3:30) Tehran'
    },
    {
        value: '+4.0',
        str: '(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi'
    },
    {
        value: '+4.5',
        str: '(GMT +4:30) Kabul'
    },
    {
        value: '+5.0',
        str: '(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent'
    },
    {
        value: '+5.5',
        str: '(GMT +5:30) Bombay, Calcutta, Madras, New Delhi'
    },
    {
        value: '+5.45',
        str: '(GMT +5:45) Kathmandu'
    },
    {
        value: '+6.0',
        str: '(GMT +6:00) Almaty, Dhaka, Colombo'
    },
    {
        value: '+7.0',
        str: '(GMT +7:00) Bangkok, Hanoi, Jakarta'
    },
    {
        value: '+8.0',
        str: '(GMT +8:00) Beijing, Perth, Singapore, Hong Kong'
    },
    {
        value: '+9.0',
        str: '(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk'
    },
    {
        value: '+9.5',
        str: '(GMT +9:30) Adelaide, Darwin'
    },
    {
        value: '+10.0',
        str: '(GMT +10:00) Eastern Australia, Guam, Vladivostok'
    },
    {
        value: '+11.0',
        str: '(GMT +11:00) Magadan, Solomon Islands, New Caledonia'
    },
    {
        value: '+12.0',
        str: '(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka'
    }
];

timezones.forEach(function(tz) {
    console.log(((new Date().getUTCHours() + parseFloat(tz.value)) % 24).toFixed(2))
})

Upvotes: 4

stdob--
stdob--

Reputation: 29172

I recommend you momentjs:

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

[ https://momentjs.com/timezone/ ]

Upvotes: 1

Related Questions