Estoy haciendo un proyecto de reacción. Quiero mostrar la fecha y la hora de hoy como "9 am". Esto debe permanecer sin cambios hasta que sean las 9 am del día siguiente. Después de eso, debería mostrar la hora como 9 a. m. junto con la fecha de ese día y continuar así hasta el día siguiente a las 9 a. m. y así sucesivamente.
<span>Last Updated: {moment().format('MMMM Do YYYY,') + " 9:00 am"}</span>El código anterior muestra la hora como las 9 a. m. incluso antes de que sean las 9 a. m. del día siguiente. Debería parecer que la hora y la fecha actuales se actualizan solo a las 9 am todos los días.
¿Es esto lo que estás buscando? ;)
const getLastStartOfDay = (startOfDayHour) => { let todayStartOfDay = new Date(); todayStartOfDay.setHours(startOfDayHour, 0, 0, 0); let yesterdayStartOfDay = new Date(todayStartOfDay); yesterdayStartOfDay.setDate(yesterdayStartOfDay.getDate() - 1); let dt = new Date(); const displayDate = dt.getHours() < startOfDayHour ? yesterdayStartOfDay : todayStartOfDay; return displayDate; }; console.log("LastStartOfDay: ", getLastStartOfDay(9));Este código crea una función que recupera la fecha formateada a una hora determinada. Si no se especifica la hora, se utilizará la hora actual. Devolverá la fecha de hoy, a menos que la hora sea antes de las 9, en cuyo caso devolverá la fecha de ayer. El formato utilizará el formato nativo del usuario actual para una fecha "larga". El HTML muestra el resultado deseado, la consola registra lo que sucede antes de las 9 del día actual y la hora actual. La hora está determinada por la zona horaria del usuario.
function getDateAtNine(forceHour) { let now = new Date(); const hour = forceHour == null ? now.getHours() : forceHour; if (hour < 9) { now = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); } return new Intl.DateTimeFormat(undefined, { dateStyle: 'long' }).format(now); } console.log(getDateAtNine(8)); // shows what will print at 8 am on today's date console.log(getDateAtNine()); // shows what will print at the current hour on today's date document.querySelector('#dateat9').textContent = getDateAtNine(); <span id="dateat9"></span><span id="nineam">, 9:00 am</span>