Google apps script 尝试使用Google脚本编辑器在Google工作表中获取日期格式,以显示为1、2、3等,并带有相关后缀

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

我正在尝试获取当前显示为星期一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 && 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}`;
}