我需要更改输入日期/时间的格式
Mon Feb 03 2014 12:00:00 GMT 0000(UTC)
至
格林威治标准时间2013年6月14日星期五14:38:13
我一直试图通过我有限的JavaScript技能弄明白,但无法弄清楚如何选择新行 .
我希望这可以改变到单元格范围D:D&F:F
这是我到目前为止所拥有的;
function onChange(){var sheet = SpreadsheetApp.getActive(); ScriptApp.newTrigger(“fixDate”) . forSpreadsheet(sheet).onChange() . create(); };
和
function fixDate(oldDate){var oldDate ='Mon Feb 03 2014 12:00:00 GMT 0000(UTC)'var split = oldDate.split(/ /);
var newDate = split [0]“,”split [2]“”split [1]“”split [3]“”split [4]“GMT”;
Logger.log(分裂[0]);
Logger.log(分裂[1]); Logger.log(分裂[2]); Logger.log(分裂[3]); Logger.log(分裂[4]); Logger.log(分裂[5]); Logger.log(分裂[6]); Logger.log(newDate); };
2 回答
我应该首先说我不认为onChange / onEdit解决方案是您正在寻找的,因为我假设您正在动态导入可能不一定触发事件的数据 . 然而,我会回答你的问题,然后展示另一种做法 .
查看Google Apps Script documentation for Events,您将看到编辑事件可以返回4个参数:
user
(工作表的所有者),source
(工作表),range
(工作表中的位置)和value
.range
特别有用,因为它让我们知道编辑的位置(这里是more on Range Class) . 值得注意的是,在更广泛的范围内的变更事件中不会返回此信息 .值得指出的是triggers can be set from the Script editor Resources menu or programmatically(请参阅使用特定于容器的可安装触发器),因为您经常是唯一的用户 . 坚持程序化路线,你的脚本可以表示为(注意在onEdit事件后有2-3秒的延迟更新):
要使用它,您需要运行
onChange
函数一次以添加触发器 . 在此之后,每次在电子表格中进行编辑时,包含范围的e
参数,值信息用于获取和设置编辑的值 . 无论正在编辑的列如何,此脚本都将运行 . 您可以扩展它以检查正在编辑的列,只需通过将fixDate替换为以下内容来影响列D和F:对于
formatDate
函数,我使用正则表达式来匹配字符串的部分内容,如dayofweek,month,day等,使用String.replace()以所需格式返回 . 这比在空间上分割更可靠,因为它寻找模式 . 这意味着一旦编辑了一个日期,它就赢了't be reformatted again because the pattern won't匹配 .使用内置公式代替
在上面的示例中,我们使用正则表达式返回一个字符串 . Google表格有existing functions/formula called REGEXREPLACE . 使用formatDate中使用的相同模式,我们可以使用以下公式:
这将以所需格式返回单元格D1中的值 . 请注意,这必须位于单独的列中,因为您可以手动将此公式复制到整个列,但Google表格有另一个公式,它基本上允许使用ARRAYFORUMLA将其应用于公式范围 . 要使用它,您可以输入单元格G1:
这将输出整个D:D列的格式化日期 .
此答案中使用的所有代码(包括工作表公式)都可以是found here(文件>制作副本以查看代码/公式)
给定任何Date对象,您可以使用
toUTCString()
方法从一种日期格式更改为另一种日期格式 .