2012-08-09 39 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