我正在嘗試查看具有一些隨機日期的列并找到今天的日期,然后將該行保存在變數中。老實說,我撰寫了代碼來做到這一點,但由于某種原因,它無法使用,我不知道為什么。
這是我的代碼。
const ss = SpreadsheetApp.openByUrl(THIS).getSheetByName("Daily PO Dashboard");
let birthday = new Date(2022, 1, 21,3,00,00)
for(var row=0; row<data.length; row ){
if(data[row][16]==birthday){
Logger.log(" I'm in!")
ss.getRange('B3:AA').setValue(data[row]);
}
}
var checkBox = ss.getRange('A3:A').insertCheckboxes();
我還嘗試將生日設定為
var birthday = new Date();
但沒有什么對我有用。
這就是我要比較的。
[
注意:它永遠不會出現在 if 陳述句中
這是我 logger.log 時的 data[row][16]。

注意:還有更多,但它們都是日期或 null
另外我 logger.log(typeof data[row][17]),我得到了一個字串。

uj5u.com熱心網友回復:
使用字串和 Utilities.formatDate() 對我來說似乎是一種蠻力。如果我必須比較日期,我會洗掉時間,然后使用 valueOf() 來比較日期。
function dummy() {
try {
var d1 = new Date();
Utilities.sleep(100);
var d2 = new Date();
console.log(d1);
console.log(d2); // Notice in console log they look alike but are different by 100 msec.
console.log( d1.valueOf() === d2.valueOf() );
function removeTime(date) {
return new Date(date.getFullYear(),date.getMonth(),date.getDate());
}
d1 = removeTime(d1);
d2 = removeTime(d2);
console.log(d1);
console.log(d2);
console.log( d1.valueOf() === d2.valueOf() );
}
catch(err) {
console.log(err);
}
}
2:46:07 PM Notice Execution started
2:46:07 PM Info Mon Feb 21 2022 17:46:07 GMT-0500 (Eastern Standard Time)
2:46:07 PM Info Mon Feb 21 2022 17:46:07 GMT-0500 (Eastern Standard Time)
2:46:07 PM Info false
2:46:07 PM Info Mon Feb 21 2022 00:00:00 GMT-0500 (Eastern Standard Time)
2:46:07 PM Info Mon Feb 21 2022 00:00:00 GMT-0500 (Eastern Standard Time)
2:46:07 PM Info true
2:46:07 PM Notice Execution completed
uj5u.com熱心網友回復:
解釋:
只需將所有內容轉換為string,這樣您就可以確保比較是正確的,否則您正在比較可能非常棘手的確切日期物件。
將birthday date物件轉換data[row][16]為string具有完全相同格式的型別:
birthday = Utilities.formatDate(new Date(),
SpreadsheetApp.getActive().getSpreadsheetTimeZone(),
"m/dd/yyyy");
console.log(birthday) // birthday is a string
和
data_temp = Utilities.formatDate(data[row][16],
SpreadsheetApp.getActive().getSpreadsheetTimeZone(),
"m/dd/yyyy");
現在您可以將它們比較為strings:
if(data_temp==birthday) {
// rest of the code here
}
解決方案:
const ss = SpreadsheetApp.openByUrl(THIS).getSheetByName("Daily PO Dashboard");
const ssTime = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
const birthday = Utilities.formatDate(new Date(),ssTime,"m/dd/yyyy");
console.log(birthday) // birthday is a string
for(var row=0; row<data.length; row ){
let data_temp = Utilities.formatDate(data[row][16],ssTime,"m/dd/yyyy");
if(data_temp==birthday){
Logger.log(" I'm in!")
ss.getRange('B3:AA').setValue(data[row]);
}
}
var checkBox = ss.getRange('A3:A').insertCheckboxes();
這種方法假設您從電子表格檔案中獲得的值是一個date物件,如果您使用日期選擇器功能,它應該是一個物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432786.html
