Comparer deux dates de Google apps script

Quelle serait la meilleure façon d' comparez deux dates?

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){ ....

j'ai vu le .l'option toString () semble ne fonctionner que pour l'opérateur == ou===.

Rien de clair à ce sujet?

12
demandé sur Rubén 2012-06-24 05:39:32

6 réponses

Date l'objet a le valueOf méthode qui renvoie le nombre de millisecondes depuis minuit 1970-01-01. Vous pouvez l'utiliser pour comparer des dates. Quelque chose comme

var date01 = new Date();
var date02 = new Date(2012, 5, 24);
if (date01.valueOf() > date02.valueOf()) {
   ....
}
21
répondu megabyte1024 2012-06-24 07:58:15

Quelqu'un a posté ceci il y a quelque temps, je trouve que c'est très utile

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();
    }
}
11
répondu JKWA 2012-06-26 00:30:41
// 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);
}
5
répondu cmaduro 2013-06-18 14:35:34

Wow, je suis en retard ici. J'ai trouvé le plus facile de convertir les dates dans le jour entier de l'année. Donc le 1er janvier serait le 1er, le 1er février serait le 32,etc.

Voici le script:

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

si vous saisissez une valeur de votre tableur, placez la valeur dans la nouvelle Date ():

today = parseInt(Utilities.formatDate(new Date(rSheet.getRange(parseInt(int) + 1 ,1).getValues()),"EST","D"));
4
répondu ZAR 2015-03-10 22:52:50

les objets Date peuvent être comparés comme n'importe quelle autre variable. La seule chose délicate est si vous avez besoin de comparer deux dates sur le même jour par exemple et s'attendre à obtenir date A = date B , dans ce cas, vous avez un problème puisque les dates comprennent également des heures et des minutes (et deuxième + millisecondes) ! (c'est pourquoi j'ai suggéré d'utiliser des chaînes de vérifier l'égalité dans le poste que vous consultez). Ce que vous pouvez faire est de mettre heures, minutes, secondes et millisecondes à 0 dans les deux variables de sorte que la comparaison se produit sur jour, mois, année seulement. Voir w3schools date de référence page pour voir comment le faire.

une autre possibilité serait de convertir les deux dates en chaînes en utilisant Utilities.formatDate() jouer substrings() pour obtenir les données dont vous avez besoin, mais je suppose que ce n'est pas très élégante, une façon de procéder ;-)

3
répondu Serge insas 2012-06-24 19:08:14

j'ai fait un peu de travail autour de, pas si charmant, mais il semble servir.

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) {....

je vais vérifier les autres réponses aussi bien et lui donner un tour.

1
répondu Jacobvdb 2018-07-25 01:44:55