2015-05-19 133 views
2

我創建了一個Google工作表,通過一列來保存工作任務列表,以跟蹤創建項目的日期,並構建了一個腳本來自動填充該列中的單元格與當天的日期,當一個新行是插入。爲什麼在Google表單中的日期驗證在上午8:00之前拒絕今天的日期?

是腳本的目標使用下面的驗證公式,以確保當用戶更改日期,他們使用的既不是週末也不是在未來日期的單元格(如G9):

=and(isdate(G9), weekday(G9,2)<6, G9<=today())

它只能工作,但只有腳本運行在上午8:00之後的任何時候!如果我早些時候嘗試使用它,單元驗證會拒絕輸入!

腳本看起來像這樣(curRow是一個已經添加的行數):

// Adds today's date without using =today() 
    var myrangename = "G"+curRow; 
    var dateCell = sheet.getRange(myrangename); 
    var d = new Date(); 
    var dateArr = []; 
    dateArr[0]=d.getFullYear(); 
    dateArr[1]=d.getMonth() + 1; //Months are zero based 
    dateArr[2]=d.getDate(); 
    dateCell.setValue(dateArr.join('/')); 

(注:我不能用簡單地把=today()單元格中的腳本,因爲所有的條目會改變每天)。

爲什麼只在上午8:00之後才工作?谷歌以某種方式運行在與我的電腦不同的時區?我在英國,所以使用BST,但這不應該是一個問題,不應該... ...?

+0

這個腳本的輸出是什麼,沒有驗證+在8AM之前輸入公式'= today()'? – Aprillion

+1

Aprillion,看起來你的直覺很好地爲你服務。在上午8:00之前,刪除單元格驗證後腳本的輸出是「20/05/2015」。而今天()的輸出是「19/05/2015」!我已經通過在另一個單元格中輸入= now()作爲公式來證實這一點,並且確實顯示了它應該在8小時後面的日期和時間,現在8小時將其返回到昨天。所以這意味着我的Google表單的「內部時鐘」以某種方式運行了8小時!爲什麼?? – alfavictor

+0

也許有關於谷歌帳戶/谷歌文件和/或谷歌有關時區需要更新的設置?你應該可以談談谷歌的支持,我猜 – Aprillion

回答

0

感謝您的建議,Aprillion。  原來Google Sheets文件有其自己的內部時區設置!在我的情況下,它被設置爲美國太平洋時間(所以後面8小時)
(您會認爲它會自動從Windows中獲取日期和時間信息,就像其他應用程序一樣!)
要設置工作表的時間 - 您需要進入主菜單,點擊'文件',然後點擊'電子表格設置...',並根據需要進行調整。
腳本和驗證現在一切正常。
謝謝大家的幫助。

+0

_您認爲它會自動從Windows中獲取日期和時間信息,就像其他應用程序一樣!_它不在Windows中運行,它在服務器上運行「in雲端」。所以不,你不會期望的。 – Mogsdad

0

嘗試

var d = new Date(); 
var d = Utilities.formatDate(d, "GMT+1", "yyyy-MM-dd HH:mm:ss"); 

我不知道如果谷歌將承認BST作爲一個時區,但你也可以嘗試

var d = Utilities.formatDate(d, "BST", "yyyy-MM-dd HH:mm:ss"); 
+0

Akshin,我已經試過你的建議,與格林威治標準時間和BST,但都沒有工作。我懷疑這與Google Sheet的「內部時鐘」有關 – alfavictor

相關問題