suellen
suellen

Reputation: 43

moment-timezone: unix timestamps with timezones

i am using momentjs.com with nodejs and im trying to get unix timestamps for multiple timezones, but sadly the the output is not correct.

code:

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

var berlin = moment.tz('Europe/Berlin').unix();
var angeles = moment.tz('America/Los_Angeles').unix();
var london = moment.tz('Europe/London').unix();

console.log(berlin);
console.log(angeles);
console.log(london);

output:

1472241731
1472241731
1472241731

Upvotes: 4

Views: 17750

Answers (3)

Livio
Livio

Reputation: 300

you can use Date.parse to get a timestamp, like this

const moment = require("moment-timezone")

const time = '2022-09-02 04:06:25'
var a = new Date(time).valueOf()                            
var b = Date.parse(moment.tz(time, "America/Chicago").format())

console.log(a)   // China 1662062785000  
console.log(b) // Chicago 1662109585000

Upvotes: 0

Umer Bhat
Umer Bhat

Reputation: 30

To show correct time to user for different timezone, we can add timezone offset to unix UTC timestamp

const convertToNewTimeZone = (timeInMilliseconds: number, timezone: string) => {
  const utcOffset = moment.tz(timeInMilliseconds, timezone).utcOffset();
  return moment(timeInMilliseconds)
    .add(utcOffset, 'minutes');
};

Note that if you are calculating time in browser, you may have to subtract the browser timezone offset

newTime.clone().subtract(moment().utcOffset(), 'minutes')

Upvotes: -3

Matt Johnson-Pint
Matt Johnson-Pint

Reputation: 241450

A Unix Timestamp is always UTC based. It is the same timestamp everywhere on the planet simultaneously.

Changing the time zone of a moment object using moment-timezone only affects the local time value, such as used with the format function (and others). It does not change the moment in time being represented, and therefore does not change the underlying timestamp.

Upvotes: 17

Related Questions