Вопрос или проблема
Здравствуйте, Senior. У меня есть проблема с сопоставлением значения между значением ячейки и значением переменной. Это код, который я использую для переменной.
var today = Utilities.formatDate(new Date(),"GMT+7","dd/MM/yyyy");
Вот код, который я использую для записи его в ячейку.
sd.getRange(sd.getLastRow(),6).setValue(today);
Так выглядит данные
А вот код для последовательности сопоставления.
for(i=0;i<da.length;i++){
var rowi = i+2;
if (da[i][1]==email){
for(j=0;j<da[i].length;j++){
console.log(da[i][5]); // значение этого
console.log(today); // значение этого отличается
if(da[i][5]==today){
ui.alert("ух");
}
}
}
}
Вот значение, которое я получаю.
da[i][5] == Пт Окт 11 2024 00:00:00 GMT+0700 (Западное индонезийское время)
today == 11/10/2024
Вот журнал, который я получил
Как мне сопоставить значение между этими двумя? Если я хочу сделать значение da[i][5]
таким же, как значение сегодня, можно ли это сделать?
На самом деле у меня есть идея создать другую переменную с форматированием даты, чтобы соответствовать формату значения da[i][5]
, но я все еще хочу изменить значение da[i][5]
. Можете мне помочь?
Ответ или решение
Чтобы решить вашу проблему с сопоставлением значения переменной today
и ячейки da[i][5]
, давайте разберёмся в деталях.
Ваша переменная today
форматируется как строка даты в формате dd/MM/yyyy
, а значение в da[i][5]
представляет собой объект даты JavaScript, который содержит гораздо больше информации (включая временную зону и время дня). Поэтому, когда вы сравниваете эти два значения, они не совпадают, так как у них разные форматы.
Вот как можно решить вашу проблему:
-
Изменить формат ячейки: Вы можете отформатировать значение
da[i][5]
так, чтобы оно соответствовало формату переменнойtoday
. Для этого вы можете воспользоваться функциейUtilities.formatDate()
, как вы это делали для переменнойtoday
:var dateInCell = Utilities.formatDate(da[i][5], "GMT+7", "dd/MM/yyyy");
-
Сравнить форматированные строки: Теперь, когда оба значения имеют одинаковый формат, вы сможете их сравнить:
if (dateInCell == today) { ui.alert("uh"); }
-
Изменить значение ячейки: Если вы хотите изменить значение в
da[i][5]
, чтобы оно соответствовалоtoday
, вам нужно сначала преобразовать строку даты обратно в объект даты. Вы можете использовать следующий код:var parts = today.split("/"); var newDate = new Date(parts[2], parts[1] - 1, parts[0]); // Обратите внимание: месяцы начинаются с 0 da[i][5] = newDate; // Установка нового значения sd.getRange(rowi, 6).setValue(newDate); // Обновление значения в ячейке
Таким образом, весь ваш цикл будет выглядеть примерно так:
for (var i = 0; i < da.length; i++) {
var rowi = i + 2;
if (da[i][1] == email) {
var dateInCell = Utilities.formatDate(da[i][5], "GMT+7", "dd/MM/yyyy");
console.log(da[i][5]); // Значение из ячейки
console.log(today); // Значение переменной today
if (dateInCell == today) {
ui.alert("uh");
} else {
// Если надо, установите значение da[i][5] на today's значение
var parts = today.split("/");
var newDate = new Date(parts[2], parts[1] - 1, parts[0]); // Обратите внимание: месяцы начинаются с 0
da[i][5] = newDate; // Установка нового значения
sd.getRange(rowi, 6).setValue(newDate); // Обновление значения в ячейке
}
}
}
Таким образом, вы можете достичь желаемого сопоставления и обновления значений в ячейках. Убедитесь, что вы корректно обрабатываете временные зоны, если это имеет значение в вашем приложении.