Aquí está el código que tengo ahora mismo:
const moment = require('moment') const m = moment const currDay = m().format('D') const dayOfWeek = m().format('dddd') const daysInMonth = m().daysInMonth() const startOfMonth = moment().startOf('month').format('YYYY-MM-DD hh:mm'); const endOfMonth = moment().endOf('month').format('YYYY-MM-DD hh:mm');
Necesito crear una fila de calendario donde el primer elemento sería la fecha de hoy, y el resto de los elementos del calendario serían la cantidad de días que quedan dependiendo del mes actual para poder representar cada día intermedio en mi HTML con Vue.
Ejemplo: mié 8, jue 9, vie 10 ... vie 31.
Creo que el OP se equivoca con el error común de formatear prematuramente. format es bueno para ver un resultado intermedio, pero hacerlo produce una cadena que no es buena para cálculos adicionales.
Intente manejar solo objetos de fecha. Convierta a cadenas solo cuando deba: (a) presentar a un lector humano, o (b) serializar para almacenamiento o transmisión.
Trabajando sin formatear...
const daysRemainingThisMonth = moment().endOf('month').diff(moment(), 'days'); console.log(`There are ${daysRemainingThisMonth} days remaining this month`)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Al igual que un equivalente de POJS, si tiene una función para devolver el último día del mes, puede usar eso y obtener la diferencia entre las dos fechas, por ejemplo
function getMonthEnd(date = new Date()) { return new Date(date.getFullYear(), date.getMonth() + 1, 0); } function getMonthDaysLeft(date = new Date()) { return getMonthEnd(date).getDate() - date.getDate(); } let d = new Date(); console.log(`There are ${getMonthDaysLeft(d)} days left in ${d.toLocaleString('en',{month:'long'})}.`);
Para obtener una lista/matriz de los días restantes, simplemente recorra una fecha, agregue 1 día a la vez y escriba las fechas en el formato requerido en la lista:
function getMonthDaysLeftAsList(date = new Date()) { let d = new Date(+date); // Formatter let f = new Intl.DateTimeFormat('en',{ day: 'numeric', month: 'short' }); let m = d.getMonth(); let dayList = []; while (d.getMonth() == m) { dayList.push(f.format(d)); d.setDate(d.getDate() + 1); } return dayList; } console.log(getMonthDaysLeftAsList());