我在尝试使用日期和时间方面遇到了很大的麻烦,而且我的编程时间耗费了几个小时,所以任何帮助都非常受欢迎。
我想要做的是结合一个单独的日期和时间;将年份和月份分开是很容易的。但是当谈到时间时,它输出:
Sat Dec 30 1899 14:30:00 GMT+1300 (NZDT)
表单字段看起来像
并且时间显示正确
在表格上。
除了将整个列格式化为字符串(这将破坏项目中的其他代码)之外,如何从中获取所需的13:00时间?
答案 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脚本项目上。