简体   繁体   中英

Can I make node.js Date always be in UTC/GMT?

My app runs on Linux servers, where the time is (naturally) set to UTC/GMT. However the app is developed on Mac desktops where the time is typically set to a local timezone.

I could change every new Date() in my code to run:

var date = new Date().getTime();

And thus ensure dates on the server are always GMT, but that seems inelegant.

I understand previous versions of node used to always return UTC/GMT . Is there any way to bring this behavior back?

Edit: Removed adding timezone offset to getTime() per comments - since getTime() is already in UTC.

You can use TZ configuration parameter of node.js as follows.

For bash (and related)

export TZ=UTC

For Powershell

$env:TC = 'UTC'

Then for both:

nodejs server/index.js

From the MDN docs on Date#getTime :

The value returned by the getTime method is the number of milliseconds since 1 January 1970 00:00:00 UTC.

Assuming you're storing dates/times as numbers (which I would recommend), getTime is already UTC, always .

Suppose your client then requests a date from the server. If the server provides the date as a number , the client can then do:

new Date(timestamp);

And it will be correctly adjusted to the local time on the client.

Of course, maybe I'm misunderstanding your problem. But I just want to point out that this...

new Date().getTime() + new Date().getTimezoneOffset();

...should never really make sense. It's taking a UTC-based time and then offsetting it further, in essence double-offsetting a time.

moment.js is a popular node and browser module for dealing with dates. It has a utc mode that should give you what you need. http://momentjs.com/docs/#/manipulating/utc/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM