var today = Utilities.formatDate имеет другое значение после его установки в ячейку со значением “сегодня” в console.log.

Вопрос или проблема

Здравствуйте, 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, который содержит гораздо больше информации (включая временную зону и время дня). Поэтому, когда вы сравниваете эти два значения, они не совпадают, так как у них разные форматы.

Вот как можно решить вашу проблему:

  1. Изменить формат ячейки: Вы можете отформатировать значение da[i][5] так, чтобы оно соответствовало формату переменной today. Для этого вы можете воспользоваться функцией Utilities.formatDate(), как вы это делали для переменной today:

    var dateInCell = Utilities.formatDate(da[i][5], "GMT+7", "dd/MM/yyyy");
  2. Сравнить форматированные строки: Теперь, когда оба значения имеют одинаковый формат, вы сможете их сравнить:

    if (dateInCell == today) {
       ui.alert("uh");
    }
  3. Изменить значение ячейки: Если вы хотите изменить значение в 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); // Обновление значения в ячейке
        }
    }
}

Таким образом, вы можете достичь желаемого сопоставления и обновления значений в ячейках. Убедитесь, что вы корректно обрабатываете временные зоны, если это имеет значение в вашем приложении.

Оцените материал
Добавить комментарий

Капча загружается...