【问题标题】:Formatted dates in a Google Apps scriptGoogle Apps 脚本中的格式化日期
【发布时间】:2012-08-09 02:32:48
【问题描述】:

我正在尝试在提交表单时获取带有简单格式日期的电子表格,但所有日期(包括时间戳)一直被发布为“Dec 31 1969 2:00PM”...我做错了什么?任何帮助将不胜感激。

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);
}

【问题讨论】:

    标签: javascript datetime google-apps-script


    【解决方案1】:

    我认为电子表格中的“日期”不是日期对象,它们只是字符串,JavaScript 将其评估为 0,这就是为什么您会得到“原点”(又名纪元)的日期值减去 GMT 偏移量...根据这些值如何进入单元格,可能会有不同的解决方案。您能否展示示例数据并说明它们是如何创建的?

    要检查我的猜测是否正确,您可以尝试使用电子表格界面更改“日期”单元格的显示格式。如果您可以在此处更改并获得一致的结果,那么我错了...如果不是...好吧,我想我是对的 :-)

    【讨论】:

    • 电子表格中的日期可以视为 js Date 对象。问题是当日期对象设置为电子表格时,该对象将根据日期的文档标准格式进行处理。我们需要一种方法来设置文档标准日期格式。
    • 对不起,你说的完全是错误的。当脚本读取工作表中的日期时,该日期在电子表格中的显示方式完全无关紧要……我建议您在做出此类断言之前尝试一下
    • 我不确定我是否正确理解你的意思。这段代码对我有用: var lastDate = sheet.setActiveCell("B1").getValue();并给出完整的 js 日期。
    • 我简单地说,在电子表格中,日期可以以多种不同的格式显示(日+月、日+月+年、小时+分钟...),这不会改变它日期对象性质:当(且仅当)它是日期而不是日期的字符串表示时,Javascript 将始终读取日期对象,包括年和月等到毫秒。
    • 好的,我同意。我以为这个人想像我一样在电子表格中设置格式。我对你投了赞成票,所以请从我的其他帖子中删除你的反对票,因为它确实是正确的。
    【解决方案2】:

    我建议回顾一下:

    https://developers.google.com/apps-script/reference/utilities/utilities?hl=es#formatDate(Date,String,String)

    格式模式如下:

    http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

    还有一个可以帮助你的例子

    Utilities.formatDate(thisFile.getLastUpdated(),"GMT-5", "yyyy/MM/dd, HH:mm:ss")

    【讨论】:

      【解决方案3】:

      此代码采用带有“时间戳”的第一行的日期,即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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多