У меня есть два столбца: row[0]
и row[1]
в моей таблице в таблицах Google. Даты внутри них являются предварительными, как написано dd.mm.yyyy
в то время как я хочу, чтобы автоматически заменить .
на /
внутри них и получить даты, отформатированные в dd/mm/yyyy
и тем не менее не конвертировать эти dd/mm/yyyy
, например, Fri Sep 02 2016 00:00:00 GMT+0300 (MSK)
во второй итерации сценария.Проблемы с датой форматирования путем замены точек на косые черты
Я искал это на Stackoverflow и нашел много советов, но, к сожалению, мне не удалось достичь желаемого результата.
Вот что я нашел и что я пытался добавить: Replacing all dots in a string with backslashes in Java. Наблюдался тот же негативный эффект.
Вот мой исходный код:
function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Строка с первым бронированием для начала обработки
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var checkInDate = row[0].toString().valueOf();
var checkOutDate = row[1].toString().valueOf();
var replaceDotsInCheckIn = checkInDate.replace(".", "/");
var replaceDotsInCheckOut = checkOutDate.replace(".", "/");
sheet.getRange(startRow + i, 1).setValue(replaceDotsInCheckIn);
sheet.getRange(startRow + i, 2).setValue(replaceDotsInCheckOut);
SpreadsheetApp.flush(); // Здесь завершается обновление ячеек 17-го столбца, в котором проставляется статус отправки уведомлений.
Logger.log("Произведена замена точек на слэши в датах заезда и выезда всех существующих бронирований.");
}
}
Как можно предотвратить превращение 02.09.2016
в Fri Sep 02 2016 00:00:00 GMT+0300 (MSK)
, когда я, во-вторых/третьих/... запустить мой сценарий? Любая помощь с соответствующими советами очень ценится заранее.
UPD № 1. Имея комментарии выше, а также один ответ, который я сделал обновление моего исходного кода, который в настоящее время:
function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Строка с первым бронированием для начала обработки
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
/* var checkInDate = row[0].toString().valueOf();
var checkOutDate = row[1].toString().valueOf(); */
var checkInDate = new Date(row[0].replace(/\./g, '/'));
var checkOutDate = new Date(row[1].replace(/\./g, '/'));
var replaceDotsInCheckIn = (checkInDate.getMonth() + 1).toString() + '/' + checkInDate.getDate().toString() + '/' + checkInDate.getFullYear().toString();
var replaceDotsInCheckOut = (checkOutDate.getMonth() + 1).toString() + '/' + checkOutDate.getDate().toString() + '/' + checkOutDate.getFullYear().toString();
sheet.getRange(startRow + i, 1).setValue(replaceDotsInCheckIn);
sheet.getRange(startRow + i, 2).setValue(replaceDotsInCheckOut);
SpreadsheetApp.flush(); // Здесь завершается обновление ячеек 17-го столбца, в котором проставляется статус отправки уведомлений.
}
Logger.log("Произведена замена точек на слэши в датах заезда и выезда всех существующих бронирований.");
}
Но я все еще получаю следующее сообщение об ошибке:
TypeError: Cannot find function replace in object Sun May 01 2016 00:00:00 GMT+0300 (MSK). (line 16, file ...
UPD № 2. Я поставил ниже источника. Я пришел, наконец, придумал:
function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "2016"; // Здесь указывается название листа таблицы, в котором требуется производить форматирование дат заезда и выезда.
var sheet = ss.getSheetByName(sheetName);
var startRow = 2; // Строка с первым бронированием для начала обработки.
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки.
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var checkInDate = row[0];
var checkOutDate = row[1];
if (typeof checkInDate == "object") { // Здесь обрабатываем даты заезда.
var formattedCheckInDate = Utilities.formatDate(checkInDate, "GMT+0300", "dd/MM/yyyy");
} else {
var formattedCheckInDate = checkInDate.toString().valueOf().replace(/\./g, "/");
Logger.log("В дате заезда в строке № " + [i+2] + " разделяющие точки были заменены на слэши.");
}
if (typeof checkOutDate == "object") { // Здесь обрабатываем даты выезда.
var formattedCheckOutDate = Utilities.formatDate(checkOutDate, "GMT+0300", "dd/MM/yyyy");
} else {
var formattedCheckOutDate = checkOutDate.toString().valueOf().replace(/\./g, "/");
Logger.log("В дате выезда в строке № " + [i+2] + " разделяющие точки были заменены на слэши.");
}
sheet.getRange(startRow + i, 1).setValue(formattedCheckInDate); // Обновляем столбец значениями обработанных дат заезда.
sheet.getRange(startRow + i, 2).setValue(formattedCheckOutDate); // Обновляем столбец значениями обработанных дат выезда.
SpreadsheetApp.flush();
}
}
Спасибо вам за ваш вклад в решение этой проблемы!
Вы, кажется, смущены тем, как даты преобразуются в строки. Вы можете сделать некоторые исследования. Преобразование '.' To '/' работает, но функция «toString» - это то, что вызывает у вас горе. – deltree
@deltree, хорошо, но как я могу заменить в существующих., Не преобразовывая его в строки? Буду признателен, если вы предоставите мне пару ссылок, описывающих мое дело, потому что мой поиск не был успешным. – RLearnsR