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

时间:2016-02-01 20:39:41

标签: javascript date datetime google-apps-script

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

如何将日期/时间UTC时间转换为毫秒?

3 个答案:

答案 0 :(得分:1)

以复杂的方式,您可以使用正则表达式将日期的每个部分提取为字符串,然后在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);
}

答案 1 :(得分:1)

我最终使用了这个。当我调用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]);
   
   }
}

答案 2 :(得分: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')))
&#13;
&#13;
&#13;

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