Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
在javascript中计算iso时间格式的时差?_Javascript_Node.js_Typescript_Datetime - Fatal编程技术网

在javascript中计算iso时间格式的时差?

在javascript中计算iso时间格式的时差?,javascript,node.js,typescript,datetime,Javascript,Node.js,Typescript,Datetime,我有两个ISO格式的日期字符串。我用力矩js计算它们之间的分钟差 var currenttime = new Date().toISOString(); var expiretime = '2020-06-05T12:18:33.000Z'; let minutes = moment(expiretime, 'YYYY-MM-DD[T]HH:mm:ss. SSS[Z]').diff(moment(currenttime, 'YYYY-MM-DD[T]HH:mm:ss. SSS[Z]')

我有两个ISO格式的日期字符串。我用力矩js计算它们之间的分钟差

var currenttime  =  new Date().toISOString();
var expiretime  = '2020-06-05T12:18:33.000Z';


let minutes = moment(expiretime, 'YYYY-MM-DD[T]HH:mm:ss. SSS[Z]').diff(moment(currenttime, 'YYYY-MM-DD[T]HH:mm:ss. SSS[Z]'), 'minutes');


console.log(minutes)
现在我有两个问题

  • 这是计算分钟差的最佳方法吗

  • 当我运行
    new Date().toISOString()
    时,
    z
    之前的值应该是时区,但每次重新启动时它都会改变


  • 请让我知道问题出在哪里?

    我认为您不必仅为了这个目的而包含moment,这可以在普通Javascript中完成。 要计算时间差,只需减去两个时间戳,这两个时间戳将给出以毫秒为单位的差。然后除以
    60*1000
    ,得出以分钟为单位的时差

    let currentTime = new Date();
    let expireTime = new Date('2020-06-05T12:18:33.000Z');
    
    let minutes = (expireTime - currentTime) / (1000 * 60);
    
    console.log(minutes);
    

    对于第一个问题,您只需减去两个日期(日期对象而不是字符串)

    更新的日期-较旧的日期(这将以毫秒为单位给出结果)

    或者使用Math.abs()函数计算毫秒-

    var msec = Math.abs( currenttime - expiretime );
    
    并使用-

    var min = Math.floor((msec/1000)/60);
    
    (二) datetime字符串中的Z代表Zulu,表示时间为UTC格式。 您可以简单地减去两个日期对象

    var currenttime = new Date();
    var currenttime_UTC = currenttime.getUTCDate();
    var expiretime = new Date('2020-06-05T12:18:33.000Z');
    
    var msec = Math.abs( currenttime_UTC - expiretime );
    var min = Math.floor((msec/1000)/60);
    

    你能告诉我为什么z值会改变吗?“时刻”也是错误的吗?z值实际上是毫秒,而不是时区。Z表示zulu,因此此表示中的日期始终以UTC为单位。如果你想指定时区,你可以在它后面写+04:30(或者不管你的时间偏移量是多少)。@Dennis-AIUI,“Z”是美国、英国、澳大利亚等国家使用的标准中GMT或UTC的标识符。名称“Zulu”来自拼音字母表,其中“Z”被称为“Zulu”。因此,与Z代表Zulu不同,它实际上是另一种方式:Zulu代表Z.:-)PS军用时区只有每小时的增量,所以不包括一些补偿或夏令时,所以Z是唯一一个通用的民用时区。ISO 8601也使用它。@RobG我知道,但OP提出了一个不同的问题。他们问为什么“z值会改变”,误解了z之前的值实际上是毫秒,而时区值会在毫秒之后,或者用z(祖鲁时间,相当于UTC)表示。不,力矩也会起作用,但如果你只是为了这个目的使用它,那么上面2条注释中的代码就足够了。如果您真的想要“ISO时间格式中的时差”,请参阅.Re:“z之前的值应该是时区,但每次重新启动时它都会更改”,请注意,toISOString始终是UTC,z之前的位实际上是时间,z是时区偏移,它表示+00:00或UTC。如果希望偏移量为±HHMM,请使用格式和ZZ:
    moment().format('YYYY-MM-DDTHH:MM:ssZZ')
    表示本地偏移量,或使用
    moment().utc().format('YYYY-MM-DDTHH:MM:ssZZ')
    表示utc。