Google apps script 使用应用程序脚本将表单中的24小时时间转换为12小时时间

Google apps script 使用应用程序脚本将表单中的24小时时间转换为12小时时间,google-apps-script,Google Apps Script,我目前正在使用表单收集特定时间的数据。问题是,它以24小时的格式返回,尽管它是以12小时的格式被询问的。i、 例如,表格上的下午1:00显示记录器事件中的13:00,是否有方法将24小时转换回12小时?下面是我正在使用的代码 function onFormSubmit(e) { var submissionSSKey = 'WorkSheet ID'; var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0]

我目前正在使用表单收集特定时间的数据。问题是,它以24小时的格式返回,尽管它是以12小时的格式被询问的。i、 例如,表格上的下午1:00显示记录器事件中的13:00,是否有方法将24小时转换回12小时?下面是我正在使用的代码

function onFormSubmit(e) {

  var submissionSSKey = 'WorkSheet ID';
  var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
  var lastRow = sheet.getLastRow();

  var PUStartTime = e.response.getItemResponses()[4].getResponse(); //Needs to be in 12-hour
  var PUEndTime = e.response.getItemResponses()[5].getResponse(); //Needs to be in 12-hour

  var joinedTimes = (PUStartTime + " - " + PUEndTime); //This is why I need 12-hour times

  var targetRange = sheet.getRange(lastRow+1, 1, 1, 1).setValues([[joinedTimes]]);
}

如果PUEndTime变量为日期格式

也许可以尝试使用formatDate实用程序

h=小时,以上午/下午1-12时为单位

a=上午/下午标记


如果PUEndTime变量为日期格式

也许可以尝试使用formatDate实用程序

h=小时,以上午/下午1-12时为单位

a=上午/下午标记


以下是我如何实现这一目标的最终版本。可以使用以下示例更改时间布局:


以下是我如何实现这一目标的最终版本。可以使用以下示例更改时间布局:



只需获取响应的值,如果它大于12,请确保从中减去12。@IdoGreen使用Logger.logPUEndTime-12将导致:[14-10-01 10:51:07:788 MST]NaN。可能是因为13:00与13.00不同,只需获取响应值,如果响应值大于12,请确保从中减去12。@IdoGreen使用Logger.logPUEndTime-12会导致:[14-10-01 10:51:07:788 MST]NaN。可能是因为13:00与13.00不一样。我执行失败:在执行日志中找不到formatDatestring、string、string方法。我猜是其中一个错误消息至少有点错误,因为存在formatDate方法。也许它毕竟不喜欢PUEndTime变量?只需检查这行代码,就可以用文档中的示例中的新日期替换PUEndTime,并查看发生了什么@谢尔金萨斯似乎做到了这一点。它转换的很好,除了当它转换时,例如,13:00 01:00 PM,它显示为05:00 PM。与时区有关的事情。关于为什么会发生这种情况有什么想法吗?检查表单时区、脚本时区和电子表格时区设置,所有设置都必须设置为相同的值。执行失败:在执行日志中找不到formatDatestring、string、string方法。我猜这是其中一个错误消息,至少有点错误,因为有一个formatDate方法。也许它毕竟不喜欢PUEndTime变量?只需检查这行代码,就可以用文档中的示例中的新日期替换PUEndTime,并查看发生了什么@谢尔金萨斯似乎做到了这一点。它转换的很好,除了当它转换时,例如,13:00 01:00 PM,它显示为05:00 PM。与时区有关的事情。了解为什么会发生这种情况吗?检查表单时区、脚本时区和电子表格时区设置,所有设置都必须设置为相同的值。使用GMT+XX值硬编码时区是危险的。如果您的国家使用夏令时,则时间值将在冬季和夏季发生变化。更喜欢使用符合您需要的字符串国家/州值,因为这将自动适应夏令时。我所在的亚利桑那州和使用表单的地方不遵守夏令时,所以我在那里很幸运。哦,幸运的人:-,您没有一个问题!!!顺便说一句,我想亚利桑那州总是夏天吧?@Sergeinsas我稍微改变了一下密码。它现在可以在任何时区工作。我猜亚利桑那州立法机构认为总是夏天……用GMT+XX值硬编码时区是危险的。如果你们国家使用夏令时,时间值将在冬季和夏季发生变化。更喜欢使用符合您需要的字符串国家/州值,因为这将自动适应夏令时。我所在的亚利桑那州和使用表单的地方不遵守夏令时,所以我在那里很幸运。哦,幸运的人:-,您没有一个问题!!!顺便说一句,我想亚利桑那州总是夏天吧?@Sergeinsas我稍微改变了一下密码。它现在可以在任何时区工作。我猜亚利桑那州的立法机关认为总是夏天。。。
var endTime = Utilities.formatDate(PUEndTime, "GMT", "hh:mm a");
function onFormSubmit(e) {

  var submissionSSKey = 'WorkSheet ID';
  var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
  var lastRow = sheet.getLastRow();

  //Get current time
  var d = new Date();

  var PUStartTime = e.response.getItemResponses()[4].getResponse();
     var split = PUStartTime.split(":"); //Split the time submitted from user on Forms
        var part1 = split[0];
        var part2 = split[1];
          d.setHours(part1) //Set the current hour to user submitted hours
          d.setMinutes(part2) //Set the current minute to user submitted minutes
  //Format the time to how we want it
  var startTime = Utilities.formatDate(d, Session.getScriptTimeZone(), "h:mm a");


  var PUEndTime = e.response.getItemResponses()[5].getResponse();
    var split = PUEndTime.split(":"); //Split the time submitted from user on Forms
        var part1 = split[0];
        var part2 = split[1];
          d.setHours(part1) //Set the current hour to user submitted hours
          d.setMinutes(part2) //Set the current minute to user submitted minutes
  //Format the time to how we want it
  var endTime = Utilities.formatDate(d, Session.getScriptTimeZone(), "h:mm a");

  //Joining those new 12-hour times together
  var joinedTimes = (startTime + " - " + endTime); 

  var targetRange = sheet.getRange(lastRow+1, 1, 1, 1).setValues([[joinedTimes]]);
}