Сравнение двух дат (строки) в JavaScript не работает - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь сравнить 2 даты в Google App Scripts, используя JavaScript.У меня проблема в том, что результат неверный, и я следовал нескольким предложениям по Stackoverflow, но он не работал.

Это мой код:
- это код дляполучение даты с сегодняшнего дня - 30 дней

  var date = new Date();
  var last_30 = date.setDate(date.getDate() - 30);
  var delete_date = Utilities.formatDate(date, 'Etc/GMT', 'dd/MM/yyyy');

Это мой код:
- это код получения значений из электронной таблицы в формате даты

    var row = values[i];  // Values from Spreadsheet cells    
    var dt = new Date(row[0]);
    var year = dt.getFullYear();
    var month = dt.getMonth() + 1 ;
    var day = dt.getDate();      
    var cell_date_value = ('0' + dt.getDate()).slice(-2) + '/'
             + ('0' + (dt.getMonth()+1)).slice(-2) + '/'
             + dt.getFullYear();

    Logger.log('cell:'+cell_date_value + ' delete:'+delete_date);

    if (Date.parse(cell_date_value) > Date.parse(delete_date)) {  
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }

Это мой Logger.log ():

[19-05-06 15:19:40:579 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:580 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:581 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:581 CEST] cell_value:03/04/2019  delete_before:06/04/2019
[19-05-06 15:19:40:582 CEST] cell_value:03/03/2019  delete_before:06/04/2019
[19-05-06 15:19:40:583 CEST] cell_value:03/03/2019  delete_before:06/04/2019
[19-05-06 15:19:40:584 CEST] cell_value:03/02/2019  delete_before:06/04/2019

Как вы можете видеть, cell_value старше delete_before в 4 последних строках, но все ещеэта ячейка не указывается в операторе if.typeOf - это string



Я также попробовал это: (не работает):

var d1 = Date.parse(cell_value);
var d2 = Date.parse(delete_before);
if (d1 < d2) {
    alert ("Error!");
}

А это:

function isLater(str1, str2)
{
    return new Date(str1) > new Date(str2);
}

Кто-нибудь может увидеть проблему?

Ответы [ 3 ]

3 голосов
/ 06 мая 2019

Я думаю, вы можете попытаться сравнить метки времени вместо объектов времени

var d1 = Date.parse(cell_value).getTime();
var d2 = Date.parse(delete_before).getTime();
if (d1 < d2) {
    alert ("Error!");
}

getTime () возвращает миллисекунды, потраченные за 1970, так что вы можете легко сравнить 2 целых числа.

Как пример:

Date.parse(cell_value) != Date.parse(cell_value)

вы сравниваете 2 экземпляра объекта. Итак, в основном вы спрашиваете, является ли это тем же объектом. Это не то же самое время.

0 голосов
/ 06 мая 2019
function date_splitter(date){
   var parts = date.split("/");
   return new Date(parts[2], parts[1] - 1, parts[0]);
}
if (date_splitter(cell_date_value) < date_splitter(delete_date)) {  
  sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
  rowsDeleted++;
} 

Это сработало!

0 голосов
/ 06 мая 2019
var date1 = new Date();
var date2 = new Date();
if(date1.getTime()>date.getTime())
{ 
  console.log("Date1 is greater")
}
else{
 console.log("Date2 is greater");

}

Метод даты " getTime () " дает время в миллисекундах, которое можно использовать для сравнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...