Сравните два варианта сценариев приложений Google
Какой был бы лучший способ сравнить две даты?
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(), но это работает только для оператора == или ===.
Что-нибудь ясно об этом?
Ответы
Ответ 1
Объект Date
имеет метод valueOf
который возвращает миллисекунды с полуночи 1970-01-01. Вы можете использовать его для сравнения дат. Что-то вроде
var date01 = new Date();
var date02 = new Date(2012, 5, 24);
if (date01.valueOf() > date02.valueOf()) {
....
}
Ответ 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();
}
}
Ответ 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);
}
Ответ 4
Вау, я опоздал. Мне было проще всего преобразовать даты в целое число года. Итак, 1 января будет 1, 1 февраля будет 32 и т.д.
Вот этот скрипт:
today = parseInt(Utilities.formatDate(new Date(),"EST","D"));
Если вы извлекаете ценность из своей таблицы, просто поместите значение в новую Date():
today = parseInt(Utilities.formatDate(new Date(rSheet.getRange(parseInt(int) + 1 ,1).getValues()),"EST","D"));
Ответ 5
Объекты Date могут сравниваться как любые другие переменные. Единственное сложное дело в том, что если вам нужно сравнить две даты в тот же день, например, и ожидать получить дату A = дата B, в этом случае у вас есть проблема, так как даты также включают часы и минуты (и секунды + миллисекунды)! (поэтому я предложил использовать строки для проверки равенства в сообщении, на которое вы ссылаетесь). Что вы можете сделать, так это установить часы, минуты, секунды и миллисекунды на 0 в обеих переменных, чтобы сравнение происходило только в день, месяц, год. См. Страницу ссылок на страницу w3schools, чтобы узнать, как это сделать.
Другой возможностью было бы преобразовать обе даты в строки с помощью Utilities.formatDate()
и играть с substrings()
чтобы получить нужные вам данные, но я думаю, что это не очень элегантный способ продолжения ;-)
Ответ 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) {....
Я также проверю остальные ответы и даю им вращение.