Pasé una hora buscando respuestas y probando cosas diferentes, así que agradezco cualquier ayuda aquí.
El siguiente código funciona muy bien para encontrar la fecha de vigencia de la parte B de alguien. Sin embargo, cuando el cumpleaños de alguien es realmente el 1 de un mes, se usa la función 'si', y ya no puedo formatear ni escribir la fecha. Es casi como si 'partB_eff' ya no fuera un objeto de fecha. (Soy un novato, así que podría estar inventando esta parte).
Recibo el error "TypeError: partB_eff.toLocaleDateString no es una función en AutoFill_6_Step_Checklist (Código: 24:27)"
¿Cómo puedo resolver esto?
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 paperpartB_eff = partB_eff.getMonth-1; No hace lo que crees que hace. Lo que hace es obtener la función vound getDate de su objeto de fecha e intentar restarle uno. En cualquier otro idioma, tratar de restar una función sería un error de tipo, pero Javascript es Javascript y permite operaciones numéricas en casi cualquier tipo. Una función menos un número en JS es NaN . NaN no tiene un método llamado toLocaleString , de ahí el error.
Lo que es interesante es que hiciste la misma operación correctamente arriba con bdayCopy.setMonth(bdayCopy.getMonth()+780) Simplemente haz lo mismo aquí
bdayCopy = new Date(bdayCopy.setMonth(bdayCopy.getMonth()-1)); También algunos conceptos importantes. if en Javascript no es una función. if es una palabra clave que inicia una declaración condicional. No puede hacer ninguna de las cosas que puede hacer con una función con if. No puede llamarlo o asignarlo a una variable o pasar ot como un argumento de función. Claramente, comprender qué es una función es algo que debe hacer para poder trabajar en JS o, francamente, en cualquier otro idioma.
Finalmente, si está haciendo matemáticas de fechas en JS, le recomiendo que use una biblioteca de fechas como DateFns o Moment. Las API de fecha nativa de Javascript son posiblemente la API de fecha peor diseñada de cualquier idioma.