在以下示例中,playgroundSheet 是全域定義的。使用 BH2、BL2 如下運行時:
function testDates(DateLow, DateHigh) {
var now = playgroundSheet.getRange('BH2').getValue();;
var nowMilli = Number(now.getTime()).toFixed(0);
var targetDate = playgroundSheet.getRange('BL2').getValue();
var targetDateMilli = Number(targetDate.getTime()).toFixed(0);
var durationMilli = targetDateMilli - nowMilli;
// return numberOfDays
Logger.log(now);
Logger.log(nowMilli);
Logger.log(targetDate);
Logger.log(targetDateMilli);
Logger.log(durationMilli/day);
}
我得到了我想要的結果:
11:00:18 AM Notice Execution started
11:00:20 AM Info Wed Jun 08 00:00:00 GMT-04:00 2022
11:00:20 AM Info 1654660800000
11:00:20 AM Info Sun Jun 12 00:00:00 GMT-04:00 2022
11:00:20 AM Info 1655006400000
11:00:20 AM Info 4.0
11:00:20 AM Info null
11:00:20 AM Info Wed Jun 08 00:00:00 GMT-04:00 2022
11:00:20 AM Info 1654660800000
11:00:20 AM Info Sun Jun 12 00:00:00 GMT-04:00 2022
11:00:20 AM Info 1655006400000
11:00:20 AM Info 4.0
11:00:19 AM Notice Execution completed
但通過呼叫函式運行:
var numberOfDays = testDates('BH2','BL2');
Logger.log(numberOfDays);
function testDates(DateLow, DateHigh) {
var now = playgroundSheet.getRange(DateLow).getValue();;
var nowMilli = Number(now.getTime()).toFixed(0);
var targetDate = playgroundSheet.getRange(DateHigh).getValue();
var targetDateMilli = Number(targetDate.getTime()).toFixed(0);
var durationMilli = targetDateMilli - nowMilli;
return numberOfDays;
我得到以下資訊:
10:28:03 AM Notice Execution started
10:28:03 AM Info null
10:28:03 AM Error
Exception: Argument cannot be null: a1Notation
testDates @ Code.gs:13
第 13 行在哪里
var now = playgroundSheet.getRange(DateLow).getValue();```
我已經嘗試過傳遞 (row, col, #row, #col) 語法,但我沒有任何想法。
uj5u.com熱心網友回復:
關于
var numberOfDays = testDates('BH2','BL2');
Logger.log(numberOfDays);
function testDates(DateLow, DateHigh) {
var now = playgroundSheet.getRange(DateLow).getValue();;
var nowMilli = Number(now.getTime()).toFixed(0);
var targetDate = playgroundSheet.getRange(DateHigh).getValue();
var targetDateMilli = Number(targetDate.getTime()).toFixed(0);
var durationMilli = targetDateMilli - nowMilli;
return numberOfDays;
}
代替
var numberOfDays = testDates('BH2','BL2');
Logger.log(numberOfDays);
經過
function myFunction(){
var numberOfDays = testDates('BH2','BL2');
Logger.log(numberOfDays);
}
然后運行myFunction而不是testDates.
以上是因為testDates從腳本編輯器、自定義選單等呼叫或任何其他函式會導致全域范圍內的陳述句在運行被呼叫的函式之前執行,在這種情況下,它運行了兩次,第一次是var numberOfDays = testDates('BH2','BL2');第二個是由用于呼叫函式的 UI/觸發器引起的。發生錯誤是因為來自 UI 的呼叫未將引數傳遞給函式。
uj5u.com熱心網友回復:
試試這種方式:
function testDates(DateLow, DateHigh) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('pg');
var now = new Date(sh.getRange('BH2').getValue());
var nowMilli = now.valueOf();
var targetDate = new Date(sh.getRange('BL2').getValue());
var targetDateMilli = targetDate.valueOf()
var durationMilli = targetDateMilli - nowMilli;
}
uj5u.com熱心網友回復:
感謝 TheMaster 和 Rubén。從另一個函式呼叫的最后一個函式回傳兩個日期之間的天數:
function testDates(DateLow, DateHigh) {
var now = playgroundSheet.getRange('BH2').getValue();;
var nowMilli = Number(now.getTime()).toFixed(0);
var targetDate = playgroundSheet.getRange('BL2').getValue();
var targetDateMilli = Number(targetDate.getTime()).toFixed(0);
var durationMilli = (targetDateMilli - nowMilli).toFixed(0);
return durationMilli/day;
}
當我嘗試學習語言時,我在這里閱讀了很多書,這是我的第一個問題。對快速而有用的回應感到非常驚訝。永遠學習,大衛
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493940.html
標籤:javascript 约会时间 谷歌应用脚本 谷歌表格 日期格式
上一篇:條件計數Google表格
