var date = Utilities.formatDate(new Date(), "GMT-8", "m/dd/yyyy")
if (formS.getRange("B7").getValue() != " " && formS.getRange("B7").getValue() != date)
{
SpreadsheetApp.getUi().alert("Please Enter A Valid Date");
return
}尝试在上述条件下检查单元格是否为空,并且该单元格不包含“今日日期”之前的日期
发布于 2021-06-26 01:09:32
function myfunk() {
const ss = SpreadsheetApp.getActive();
const formS = ss.getSheetByName('formS');
const dtv = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).valueOf();
if (!formS.getRange("B7").isBlank() && new Date(formS.getRange("B7").getValue()).valueOf() < dtv) {
SpreadsheetApp.getUi().alert("Please Enter A Valid Date");
return;
}
}发布于 2021-06-28 09:37:53
在Apps脚本中检查日期
通常,您可以像在普通JavaScript代码中一样使用Date对象。如果您的脚本需要对时区敏感,那么只需要记住一件主要的事情。
时区在清单中定义:

这不能动态更改。因此,如果您需要对它们敏感,那么您需要管理代码中的偏移量。
你的剧本
这一行:
var date = Utilities.formatDate(new Date(), "GMT-8", "m/dd/yyyy")返回一个字符串。不是日期对象,因此不能将其与其他日期对象进行比较,例如,如果工作表值被格式化为日期,则从工作表值返回的内容。
您可以使用Regex或split获取年份和月份,并以这种方式进行比较,但是在1月1日使用脚本时可能会遇到问题。这是因为,简单地将31/12/2021和01/01/2022的年份、月份和日期进行比较,您的条件语句就会有点棘手。有可能,但可能有点难读。
初始化到午夜
下面是以一种相对简单的方式进行比较的一种方法。
将日期对象初始化为当前的00:00:00似乎很方便。然后,您可以使用Unix时间快速比较数据。
var now = new Date()
now.setHours(0)
now.setMinutes(0)
now.setSeconds(0)
now.setMilliseconds(0)您还可以以更简洁的方式这样做:
var now = new Date()
now.setHours(0,0,0,0);然后,您可以在date对象上使用getTime()方法获取以毫秒为单位的统一时间,并对它们进行比较。
var dateToCheck = formS.getRange("B7").getValue()
if (
!(dateToCheck instanceof Date) || // If value is not instance of a Date object
dateToCheck.getTime() <= now.getTime() // If date is before 00:00:00 today.
) {
SpreadsheetApp.getUi().alert("Please Enter A Valid Date");
return
}
}这似乎是一个简洁的方式来做比较,你正在寻找。
参考文献
https://stackoverflow.com/questions/68137667
复制相似问题