提取新日期的时间

时间:2015-12-17 11:40:57

标签: javascript datetime google-apps-script google-sheets google-form

我在尝试使用日期和时间方面遇到了很大的麻烦,而且我的编程时间耗费了几个小时,所以任何帮助都非常受欢迎。

我想要做的是结合一个单独的日期和时间;将年份和月份分开是很容易的。但是当谈到时间时,它输出:

Sat Dec 30 1899 14:30:00 GMT+1300 (NZDT)

表单字段看起来像

this

并且时间显示正确

在表格上。

除了将整个列格式化为字符串(这将破坏项目中的其他代码)之外,如何从中获取所需的13:00时间?

4 个答案:

答案 0 :(得分:1)

经过多次实验,我已经找到了一个基本的解决方案。我希望,如果谷歌更新从表格中添加的时间,它会破坏。我所做的是采用00:00:00时间的毫秒值并在给定时间内取差值,然后使用一些简单的数学计算得出小时和分钟。

function extractTime(date) {

  var milliseconds =  date.getTime()+2209203000000;
  var time = {};
  time.hours = Math.floor(milliseconds/(1000*60*60));
  time.minutes = Math.round((milliseconds/(1000*60*60)-time.hours)*60);

  return time;

}

已经过测试,似乎有效。

答案 1 :(得分:0)

另一种方法:

function getTimeFromDate(date) {
  return Utilities.formatDate(new Date(), "NZDT", "hh:mm")
}

答案 2 :(得分:0)

我遇到了同样的问题,但通过查看阿米特(Amit)的帖子,我意识到,确保此功能始终有效的最佳方法是仅使用Google的设置。因此,我想出了以下解决方案,无论电子表格的时区是什么(实际上是问题的根源),该解决方案都可以起作用:

/**
 * Formats a JSON date string or a date object using the spreadsheet's timezone
 * or the timezone you specify.  Can also be found here:
 * https://gist.github.com/westc/3a90b6ad29bbd96c98603048255f8fcc
 * @param {Date|string} date
 *   The date object or the string that should be formatted as a date string.
 * @param {string=} opt_format
 *   Optional. The format of the date as it should be returned.  If not
 *   specified the format will be "yyyy-MM-dd'T'HH:mm:ss'Z'".
 * @param {string=} opt_timeZone
 *   Optional.  Timezone to use to format the date.  Defaults to the
 *   spreadsheet's time zone.
 * @return {string}
 *   The formatted version of date as a string.
 */
function formatDate(date, opt_format, opt_timeZone) {
  return Utilities.formatDate(
    new Date(date),
    opt_timeZone || SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(),
    opt_format || "yyyy-MM-dd'T'HH:mm:ss'Z'"
  );
}

要在工作表中找到的值上使用此值,可以按如下所示使用它:

Logger.log(formatDate(SpreadsheetApp.getActive().getActiveCell().getValue(), "H:mm"));

完成此操作后,我能够找到当前所选单元格中的时间值。

答案 3 :(得分:0)

最简单的解决方案是使用getDisplayValue()来获取单元格显示的值,因为您不必担心Google表格和Google Apps脚本/ JavaScript处理日期时间值以及可能时区不同的差异。设置在Google表格电子表格和Google Apps脚本项目上。