Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用nodejs从系统中获取本地时区_Node.js_Time - Fatal编程技术网

Node.js 如何使用nodejs从系统中获取本地时区

Node.js 如何使用nodejs从系统中获取本地时区,node.js,time,Node.js,Time,有没有办法使用nodejs从系统(例如:-ubuntu)获取本地时区 我使用moment.js提取日期和时间值。但也找不到提取时区的方法 我用moment.js()解决了这个问题 var-moment=require('moment'); var offset=力矩().utcOffset(); console.log('.concat(偏移量

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


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

我用moment.js()解决了这个问题

var-moment=require('moment');
var offset=力矩().utcOffset();
console.log('.concat(偏移量<0?-“:“+”),moment('.concat(Math.abs(偏移量/60),Math.abs(偏移量%60)<10?:'',Math.abs(偏移量%60)),“hmm”)。格式(“HH:mm”);
------编辑--------

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

它给出了输出:

+05:30

这很简单

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

没有其他任何东西,或者你可以看到momentJS是否能帮助你。

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

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

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

我们如何应对所有这些时区问题?其实很简单:

  • 以UTC格式保存所有时间
  • 存储发生此情况的时区名称
  • 在现代浏览器中,您可以获得本地IANA时区字符串,如下所示:

    Intl.DateTimeFormat().resolvedOptions().timeZone // eg. 'America/Chicago'
    
    然后,您可以在库中使用此时区字符串来帮助抵消捕获的UTC时间

    DateTime.fromISO("2017-05-15T09:10:23", { zone: "Europe/Paris" });
    
    你可以用Luxon 请参阅:

    安装:
    npm安装luxon

    var { DateTime } = require('luxon');
    let d = DateTime.local();
    console.log(d.zoneName); //Asia/Saigon
    
    这很简单,不需要库:

    如何在大多数服务器上查看准确的时区名称: 完美无瑕: 不管夏令时等问题如何,您都会得到正确的时间文本


    方便相关的mysql提示: 在几乎所有的服务器上,mysql还需要知道tz信息

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

    sudomysql\u tzinfo\u to\u sql/usr/share/zoneinfo | mysql-mysql


    。。谷歌更多信息。

    试试这个
    newdate().getTimezoneOffset()
    。谢谢。成功了。但我需要格式化成“hh:mm”;所以我使用了带有
    console.log(''.concat(偏移量<0?-“:“+”),矩('.concat(Math.abs(偏移量/60),Math.abs(偏移量%60)<10?:0:'',Math.abs(偏移量%60)),“hmm”)。格式(“HH:mm”);
    你也可以使用
    矩().format('Z')
    以获得相同的结果。这将为您提供当前时区中的当前偏移量,但由于DST变化,这可能会在一年中的部分时间发生变化。如果有疑问,请始终使用/存储UTC日期/时间加上时区标识符,然后尽可能晚地转换为本地。这样,您可以处理交叉DST变化。有关详细信息,请参阅我的答案。Th答案是正确的。偏移量和时区是相关的,但不同,如果您的代码要求如上所述考虑夏令时,则可能会造成严重破坏。您能告诉我以下内容是否正确吗?如果UI(适用于芝加哥的用户)将日期发送到服务器(位于伦敦)它将以ISO8601/RFC3339格式(2018-06-23T11:00:00Z)发送日期,并从浏览器(“美国/芝加哥”)发送时区。服务器会在需要时将这两个字段发送到UI,UI会将它们转换为浏览器的系统时区。如果日期是在服务器端生成的,则会将日期+服务器上设置的时区名称(“伦敦”)发送到UI,然后UI可以将其格式化为芝加哥时区。关于历史日期,我不明白为什么需要时区名称。如果在生成日期时保存偏移量(例如,巴塞罗那夏季+2:00),当您在巴塞罗那的冬季+1:00时,您将从服务器上获得一个+2:00的日期,这将是正确的。我只看到未来日期需要使用时区名称。我是否误解了这一点?这使得矩.js不再需要用于这个简单的任务。此外,矩.js现在还有更轻的替代品。因为问题是关于Node.js,值得注意的是,Intl从0.11版开始就可用。这一版本很好,但如果偏移量为负,您将得到--4:0,添加填充函数也是一个好主意。偏移量与时区不同。两个时区可以具有相同的偏移量,但具有不同的DST规则。
    var { DateTime } = require('luxon');
    let d = DateTime.local();
    console.log(d.zoneName); //Asia/Saigon
    
    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)
    
    ls /usr/share/zoneinfo