2012-08-09 73 views
4

我試圖在提交表單時使用簡單的格式化日期獲取電子表格,但是所有日期(包括時間戳記都不斷髮布爲「Dec 31 1969 2:00 PM」)...我究竟做錯了什麼?任何幫助將不勝感激。Google Apps腳本中的格式化日期

function formSubmitReply(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = sheet.getActiveRange().getRowIndex(); 
    var lastRow = sheet.getLastRow(); 
    // Set the status of a new ticket to 'New'. 

    sheet.getRange(lastRow, getColIndexByName("Status")).setValue("New"); 

    var ticketTime = sheet.getRange(row, getColIndexByName("Timestamp")).getValue(); 

    var subdate = Utilities.formatDate(new Date(ticketTime), "GMT-10", "EEE MM/dd/yyyy 'at' h:mm a"); 
    sheet.getRange(lastRow, getColIndexByName("Timestamp")).setValue(subdate); 

    var sDate = sheet.getRange(row, getColIndexByName("Start Date")).getValue(); 
    var strtdate = Utilities.formatDate(new Date(sDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("Start Date")).setValue(strtdate); 

    var sTime = sheet.getRange(row, getColIndexByName("Start Time")).getValue(); 
    var strttime = Utilities.formatDate(new Date(sTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("Start Time")).setValue(strttime); 

    var eDate = sheet.getRange(row, getColIndexByName("End Date")).getValue(); 
    var enddate = Utilities.formatDate(new Date(eDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("End Date")).setValue(enddate); 

    var eTime = sheet.getRange(row, getColIndexByName("End Time")).getValue(); 
    var endtime = Utilities.formatDate(new Date(eTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("End Time")).setValue(endtime); 
} 

回答

3

我認爲「日期」在電子表格中都沒有約會對象,它們只是字符串和JavaScript評價它爲0,這就是爲什麼你的「出身」的日期值(又名時期)減去GMT偏移......取決於這些值如何進入單元格中,可能會有不同的解決方案。你可以顯示示例數據並告訴它們是如何創建的?

要檢查我的猜測是否正確,您可以簡單地嘗試使用電子表格界面更改'日期'單元格的顯示格式。如果您可以在那裏更改並獲得一致的結果,那麼我錯了... if不......嗯,我想我是正確的:-)

+0

電子表格中的日期可視爲js日期對象。問題在於日期對象設置爲電子表格時,根據日期的文檔標準格式處理對象。我們需要一種方法來設置文檔的標準日期格式。 – 2012-08-20 13:22:42

+0

對不起,但你說的是錯的。當腳本在工作表中讀取日期時,電子表格中顯示的日期完全不相關......我建議您在做出這樣的斷言之前嘗試一些事情 – 2012-08-20 13:27:45

+0

林不知道我正確理解您的意思然後.. 此代碼適用於我: var lastDate = sheet.setActiveCell(「B1」)。getValue(); 並給出了完整的js日期。 – 2012-08-20 13:30:46

1

該代碼將第一行的日期攜帶「時間戳」,即new Date ("TimeStamp")所以它找回了錯誤的日期作爲getRowIndex回報1:

function formSubmitReply(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = sheet.getActiveRange().getRowIndex(); 
    //try to increment row as below to get row 2 
    row++; 
    var lastRow = sheet.getLastRow(); 
    //increment last row to write to new row to observe new date 
    lastRow++; 
    // Set the status of a new ticket to 'New'. 

    sheet.getRange(lastRow, getColIndexByName("Status")).setValue("New"); 

    var ticketTime = sheet.getRange(row, getColIndexByName("Timestamp")).getValue(); 

    var subdate = Utilities.formatDate(new Date(ticketTime), "GMT-10", "EEE MM/dd/yyyy 'at' h:mm a"); 
    //use log window select views-> logs to see your output 
    Logger.log("subdate : "+subdate); 
    sheet.getRange(lastRow, getColIndexByName("Timestamp")).setValue(subdate); 

    var sDate = sheet.getRange(row, getColIndexByName("Start Date")).getValue(); 
    var strtdate = Utilities.formatDate(new Date(sDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("Start Date")).setValue(strtdate); 

    var sTime = sheet.getRange(row, getColIndexByName("Start Time")).getValue(); 
    var strttime = Utilities.formatDate(new Date(sTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("Start Time")).setValue(strttime); 

    var eDate = sheet.getRange(row, getColIndexByName("End Date")).getValue(); 
    var enddate = Utilities.formatDate(new Date(eDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("End Date")).setValue(enddate); 

    var eTime = sheet.getRange(row, getColIndexByName("End Time")).getValue(); 
    var endtime = Utilities.formatDate(new Date(eTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("End Time")).setValue(endtime); 
} 

//enter code here