Google apps script 尝试使用Google脚本编辑器在Google工作表中获取日期格式,以显示为1、2、3等,并带有相关后缀
我正在尝试获取当前显示为星期一25@7:30 PM的日期格式,但我希望它显示相关后缀,即“th”或“st”或“nd”,即第4、1、2等 我正在使用下面的代码,但收到错误消息“Exception:Invalid argument:date.应该是:date类型”有什么想法吗?非常感激Google apps script 尝试使用Google脚本编辑器在Google工作表中获取日期格式,以显示为1、2、3等,并带有相关后缀,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试获取当前显示为星期一25@7:30 PM的日期格式,但我希望它显示相关后缀,即“th”或“st”或“nd”,即第4、1、2等 我正在使用下面的代码,但收到错误消息“Exception:Invalid argument:date.应该是:date类型”有什么想法吗?非常感激 function getOrdinal(date) { var d = new Date(), suffix = ['th', 'st', 'nd', 'rd'][(d > 3 &&a
function getOrdinal(date) {
var d = new Date(),
suffix = ['th', 'st', 'nd', 'rd'][(d > 3 && d < 21) || d % 10 > 3 ? 0 : d % 10];
return Utilities.formatDate(date, Session.getScriptTimeZone(), "d'" + suffix + "MMMM, yyyy");
}
函数getOrdinal(日期){
var d=新日期(),
后缀=['th','st','nd','rd'][(d>3&&d<21)| | d%10>3?0:d%10];
return Utilities.formatDate(日期,Session.getScriptTimeZone(),“d'+后缀+“MMMM,yyyy”);
}
说明:
您的目标是将工作表中的日期转换为2021年1月25日星期一
- 您可以使用当前解决方案获取
,然后使用25th
获取日期、月份和年份实用程序.formatDate
- 用于连接结果字符串
myFunction
将新格式粘贴到M
列中,假设数据输入在L
列中(请参见屏幕截图):
函数myFunction(){
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet1');//输入工作表的名称
常量dts=sh.getRange('L1:L6').getValues().flat();
const new_dts=dts.map(c=>[getOrdinal(c)];
sh.getRange(1,13,新数据长度,1).setValue(新数据);
}
函数getOrdinal(输入){
常数dt=新日期(输入);
常数d=dt.getDate();
常量后缀=['th','st','nd','rd'][(d>3&&d<21)| | d%10>3?0:d%10];
const dayN=Utilities.formatDate(dt,Session.getScriptTimeZone(),“EEEE”);
常数ds=d+后缀;
const rd=Utilities.formatDate(dt,Session.getScriptTimeZone(),“MMMM-yyyy”);
返回`${dayN}${ds}${rd}`;
}
代码片段的示例表:
如果
date
是Monday 25@7:30 PM
那么这不是有效的date
对象。你能显示一下你定义的代码日期吗?日期是这样显示的,但在谷歌表单中写的是:1/25/2021 19:30:00,即使我将前端格式更改为与此相同,也会出现同样的问题。感谢Marios澄清,您的输入是周一25@7:30 PM
,您希望2021年1月25日
让我知道它是否适合您。是的,Marios我希望它是2021年1月25日星期一我刚刚添加了一个屏幕截图,显示输出格式与原始输入格式的对比,你能根据输入的格式而不是输出格式来使用代码吗?我相信如果不是这样的话,代码就不会工作了。@BenWillis我更新了我的答案。让我知道它是否对你有效,以及它是否可以确认答案。谢谢你,马里奥斯,你知道我如何让它在最后显示时间吗?i、 e.2021年1月25日星期一下午7:30?这是桌子。我想你可以用mmmmmmyyyy@hhh:mmmmmmaaaa
之类的东西来代替mmmmyyyy
。我不确定它是否能像那样工作,但你可以试试(使用一个或四个字母等)。如果它不起作用,请发布一个新问题并在这里发布链接@本威利斯
function myFunction(){
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // put the name of your sheet
const dts = sh.getRange('L1:L6').getValues().flat();
const new_dts = dts.map(c=>[getOrdinal(c)]);
sh.getRange(1,13,new_dts.length,1).setValues(new_dts);
}
function getOrdinal(input) {
const dt = new Date(input);
const d = dt.getDate();
const suffix = ['th', 'st', 'nd', 'rd'][(d > 3 && d < 21) || d % 10 > 3 ? 0 : d % 10];
const dayN = Utilities.formatDate(dt, Session.getScriptTimeZone(), "EEEE");
const ds = d+suffix;
const rd = Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMMM yyyy");
return `${dayN} ${ds} ${rd}`;
}