繁体   English   中英

如何从日期/时间戳中减去两个不同的日期?

[英]How to subtract two different dates from a date/time stamp?

我需要从类似2016-01-27T01:10:57.569000+00:00的日期时间中减去类似1/26/2015的日期。 从我读过的内容来看,将距Epoch的距离转换为毫秒数,然后减去是最简单的方法。 我尝试使用各种方法,但是所有方法似乎都说2016-01-27T01:10:57.569000+00:00是无效数据。 .getTime()方法非常适合1/26/2015格式,但无法读取2016-01-27T01:10:57.569000+00:00

如何将日期/时间UTC时间设置为毫秒?

以一种复杂的方式,您可以使用正则表达式将日期的每个部分提取为字符串,然后在具有所有参数的new Date使用它们:

function getTimeDifference(){
  var regEx = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):([\d.]+)/;
  var dateString = '2016-01-27T01:10:57.569000+00:00';
  var r = regEx.exec( dateString );
  var date1 = new Date(r[1], r[2]-1, r[3], r[4], r[5], r[6]); // Notice the -1 in the month
  var date2 = new Date('1/26/2015');
  var difference = date1 - date2;
  Logger.log(difference);
}

我最终使用了这个。 当我调用parseDate()时,我使用getTime()获取以毫秒为单位的日期,然后减去它们并将其转换为天。 对于我的用例,时间不必减少到第二个,但是如果是这样,则从字符串中解析更多信息就不难了。 最初,我遇到了麻烦,因为作为Javascript初学者,我不知道为什么应用脚本不会在日期构造函数中接受这种格式。

 function parseDate(str) { //This should accept 'YYYY-MM-DD' OR '2016-01-27T01:10:57.569000+00:00' if(str.length == 10){ var mdy = str.split('-'); return new Date(mdy[0], mdy[1]-1, mdy[2]); } else { var mdy = str.split('-'); var time = mdy[2].split('T'); var hms = time[1].split(':'); return new Date(mdy[0], mdy[1]-1, time[0], hms[0], hms [1]); } } 

如果您确信日期字符串中的值将始终有效并且ISO8601字符串将始终具有偏移量00:00(即UTC),则简单的解析函数为:

 // Parse ISO 8601 format 2016-01-27T01:10:57.569000+00:00 function parseISOUTC(s) { var b = s.split(/\\D/); return new Date(Date.UTC(b[0],b[1]-1,b[2],b[3],b[4],b[5],b[6])); } document.write(parseISOUTC('2016-02-04T00:00:00.000+00:00')); // Parse US format m/d/y function parseMDY(s) { var b = s.split(/\\D/); return new Date(b[2],b[0]-1,b[1]); } document.write('<br>'+ parseMDY('2/4/2016')) document.write('<br>'+ (parseISOUTC('2016-02-04T00:00:00.000+00:00') - parseMDY('2/4/2016'))) 

请注意,第一个字符串是UTC,第二个字符串将被视为本地字符串(根据ECMAScript 2015),因此2016-02-04T00:00:00.000 + 00:00和2/4/2016之间的时差将为时区偏移量主机系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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