比较两个日期谷歌Apps脚本比较两个日期谷歌Apps脚本(Compare two dates Goo

2019-05-12 06:04发布

什么是比较两个日期的最好方法?

var int = e.parameter.intlistbox;
var startDate = rSheet.getRange(parseInt(int) + 1 ,1).getValues();
// returns Sat Jun 30 2012 00:00:00 GMT-0300 (BRT) 
var toDay = new Date();
// Sat Jun 23 2012 22:24:56 GMT-0300 (BRT)

if (startDate > toDay){ ....

我看到的ToString()选项,但似乎工作只为==或===运算符。

任何清楚这件事情?

Answer 1:

Date对象具有valueOf自午夜1970-01-01返回的毫秒数方法。 你可以用它来比较日期。 就像是

var date01 = new Date();
var date02 = new Date(2012, 5, 24);
if (date01.valueOf() > date02.valueOf()) {
   ....
}


Answer 2:

有人张贴这一段时间回来,我发现它是非常有帮助

function testDate() {
    var futureDate = new Date('8/31/2020');
    var todayDate = new Date();
    Logger.log(DateDiff.inMonths(todayDate, futureDate));
    Logger.log(DateDiff.inYears(todayDate, futureDate));             
}

var DateDiff = {    
    inDays: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000));
    },
    inWeeks: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000*7));
    },
    inMonths: function(d1, d2) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();

        return (d2M+12*d2Y)-(d1M+12*d1Y);
    },
    inYears: function(d1, d2) {
        return d2.getFullYear()-d1.getFullYear();
    }
}


Answer 3:

// Date, Date -> Number
// Get the number of days between two dates

test("Date Diff In Days", 5, function(){
  ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 1, 2000")) == 0, "Ok");
  ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 2, 2000")) == 1, "Ok");
  ok(DateDiffInDays(new Date("January 1, 2000"), new Date("January 11, 2000")) == 10, "Ok");
  ok(DateDiffInDays(new Date("January 11, 2000"), new Date("January 1, 2000")) == -10, "Ok");
  ok(DateDiffInDays(new Date("January 1, 2000"), new Date("April 10, 2000")) == 100, "Ok");
});


function DateDiffInDays(a, b) 
{
  var _MS_PER_DAY = 1000 * 60 * 60 * 24;
  // Discard the time and time-zone information.
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}


Answer 4:

哇,我来晚了这里。 我发现最容易的日期转换为一年的整节。 因此,1月1日将是1,2月1日将是32,等等。

下面是该脚本:

today = parseInt(Utilities.formatDate(new Date(),"EST","D"));

如果你抓住从您的电子表格的值,只需将值到新的日期():

today = parseInt(Utilities.formatDate(new Date(rSheet.getRange(parseInt(int) + 1 ,1).getValues()),"EST","D"));


Answer 5:

Date对象可以像任何其他变量进行比较。 唯一棘手的事情是,如果你需要两个日期在同一天的比较,例如,并期望得到最新A =日期B,在这种情况下,你有一个问题,因为日期还包括小时和分钟(和第二+毫秒)! (这就是为什么我建议使用字符串你指的是后检查平等)。 你可以做的就是这样的比较对日,月,年只发生时,分,秒和毫秒设置为0,在这两个变量。 见W3Schools的日期的引用页面 ,看看如何做到这一点。

另一种可能性是这两个日期转换为使用字符串Utilities.formatDate()和玩耍substrings()来获得你所需要的数据,但我想这是不是进行了非常优雅的方式;-)



Answer 6:

我做了一点变通,不是那么迷人,但它似乎服务。

var startDate = rSheet.getRange(parseInt(int) + 1 ,1).getValues();
var toDay = new Date();

 var sYyyy = Utilities.formatDate(new Date(startDate), "GMT-2","yyyy");
 var sMm = Utilities.formatDate(new Date(startDate), "GMT-2","MM");
 var sDd = Utilities.formatDate(new Date(startDate), "GMT-2","dd");

 var tYyyy = Utilities.formatDate(new Date(toDay), "GMT-2","yyyy");
 var tMm = Utilities.formatDate(new Date(toDay), "GMT-2","MM");
 var tDd = Utilities.formatDate(new Date(toDay), "GMT-2","dd");


 if (sYyyy + sMm + sDd > tYyyy + tMm + tDd) {....

I'll检查出其他的答案也并给它一个旋转。



文章来源: Compare two dates Google apps script