我花了一个小时寻找答案并尝试了不同的事情,所以我很感激这里的帮助。
以下代码非常适合查找某人的B部分生效日期。然而,当某人的生日真的在一个月的1号时,"if"函数就会被使用,我再也无法格式化和书写日期了。这几乎就像"partB_eff"不再是一个日期对象。(我是个新手,所以我可能只是在编这个部分。(
我得到了错误";类型错误:partB_eff.toLocaleDateString不是AutoFill_6_Step_Checklist(代码:24:27(处的函数";
我该如何解决此问题?
let birthday = new Date(e.values[2]);
//this is a date entered from a google form
let bdayCopy = new Date(birthday);
//I created this since I'll be using .setMonth(), and I don't want to change the original date of the birhtday
let bday65 = new Date(bdayCopy.setMonth(bdayCopy.getMonth()+780));
//finds the 65th birthday
let partB_eff = new Date(bdayCopy.setDate(01));
//find's the Medicare part B effective date (the 1st of the month someone turns 65)
if(birthday.getDate()==1){
partB_eff = partB_eff.getMonth-1;
//if the person's birthday is really on the 1st of the month, the part b effective date is the 1st of the month prior. partB_eff must be converted
}
partB_eff = partB_eff.toLocaleDateString('en-us',{year:"numeric",month: "short",day:"numeric"});
//format partB_eff so that it looks nice on paper
partB_eff = partB_eff.getMonth-1;
不会做你认为它会做的事。它所做的是从日期对象中获取vound函数getDate,并尝试从中减去一个。在任何其他语言中,尝试对函数进行减法都是类型错误,但Javascript是Javascript,几乎允许对任何类型进行数字运算。JS中的一个函数减去一个数字就是NaN
。NaN
没有名为toLocaleString
的方法,因此出现错误。
有趣的是,您在bdayCopy.setMonth(bdayCopy.getMonth()+780)
上正确地执行了相同的操作在这里做同样的事情
bdayCopy = new Date(bdayCopy.setMonth(bdayCopy.getMonth()-1));
还有一些重要的概念。Javascript中的if
是而不是函数。if
是一个启动条件语句的关键字。你不能用if对函数做任何可以做的事情。你不能调用它或将它赋值给变量,也不能将ot作为函数参数传递。为了能够在JS或任何其他语言中工作,您需要清楚地理解函数是什么。
最后,如果你在JS中进行日期计算,我强烈建议你使用DateFns或Moment这样的日期库。Javascript原生日期API可能是所有语言中设计最差的日期API。