如何使用nodejs从系统获取本地时区

时间:2016-08-12 10:11:38

标签: node.js time

有没有办法使用nodejs从系统中获取本地时区(例如: - ubuntu)?

我使用moment.js来提取日期和时间值。但是也无法找到提取时区的方法。

5 个答案:

答案 0 :(得分:12)

现有的答案将告诉您当前的时区偏移,但如果您要比较历史/未来时间点,则会遇到问题,因为这不符合夏令时的变化。

在许多时区中,偏移量在一年中变化,这些变化发生在不同日期或根本不发生,具体取决于纬度。如果您只有UTC时间和偏移量,那么在一年中的其他不同时间,您永远无法确定该位置的偏移量。

例如,UTC + 2:00偏移量可以指夏季或象牙海岸全年的巴塞罗那。 2小时的偏移量将始终显示在象牙海岸的正确时间,但在巴塞罗那的半年内将持续1小时。

Check out this article covering the above.

我们如何迎合所有这些时区问题?嗯,这很简单:

  1. 以UTC格式保存所有时间
  2. 存储发生此事件的时区名称
  3. 在现代浏览器中,您可以获取如下的本地IANA时区字符串:

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            sharingIntent.setPackage("com.google.android.gm");
            String shareBody = "Here is the share content body";
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(sharingIntent);
    

    然后,您可以在Luxon等库中使用此时区字符串来帮助抵消捕获的UTC时间。

    Intl.DateTimeFormat().resolvedOptions().timeZone // eg. 'America/Chicago'
    

答案 1 :(得分:4)

这很简单。

var x = new Date();
var offset= -x.getTimezoneOffset();
console.log((offset>=0?"+":"-")+parseInt(offset/60)+":"+offset%60)

没有别的,或者你可以看到 momentJS 是否可以帮到你。

答案 2 :(得分:3)

就是这么简单,不需要库:

console.log("test ...")
let d = new Date()
console.log("UTC time " + d)
let ank = d.toLocaleString('en-US', { timeZone: 'America/Anchorage' });
console.log("your time zone " + ank)

enter image description here

如何在大多数服务器上查看确切的时区名称:

ls /usr/share/zoneinfo

完美运行:

无论夏令时问题等如何,您都会获得正确的时间文本。


方便的相关 mysql 提示:

在几乎所有服务器上,mysql 也需要知道 tz 信息。

基本上解决方案是,在外壳上

sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql

...谷歌更多关于它。

答案 3 :(得分:0)

您可以使用Luxon 请参阅此处:https://moment.github.io/luxon/docs/manual/tour.html

设置:npm install luxon

var { DateTime } = require('luxon');
let d = DateTime.local();
console.log(d.zoneName); //Asia/Saigon

答案 4 :(得分:-2)

我使用moment.js(http://momentjs.com/docs/

解决了这个问题
var moment = require('moment');
var offset = moment().utcOffset();
console.log(''.concat(offset < 0 ? "-" : "+",moment(''.concat(Math.abs(offset/60),Math.abs(offset%60) < 10 ? "0" : "",Math.abs(offset%60)),"hmm").format("HH:mm")));

------ --------已编辑

我使用moment.js找到了更好的解决方案。只需使用moment().format('Z')

即可

给出输出:

  

05:30