Quiero que la salida diga 11 p. m., por ejemplo, en lugar de 2300. No estoy seguro de cómo convertirlo. Todo lo demás está funcionando como quiero, pero no quiero la salida en tiempo militar.
<script> var d = new Date(); var n = d.getDay(); var now = d.getHours() + "." + d.getMinutes(); var weekdays = [ ["Sunday", 13.00, 1700], ["Monday", 9.00, 2200], ["Tuesday", 9.00, 2200], ["Wednesday", 9.00, 2200], ["Thursday", 9.00, 2200], ["Friday", 9.00, 19.00], ["Saturday", 9.00, 17.00] ]; var day = weekdays[n]; ; if (now > day[1] && now < day[2] || now > day[3] && now < day[4]) { console.log("We are open today from "+ day[1]); document.getElementById('example').innerHTML = "We are open today from "+day[1]+"AM"+" to "+day[2]; } else { console.log("We are currently closed. We will open at"); document.getElementById('example').innerHTML = "We are currently closed. We will open at"+ day[1]; } </script>
Es posible que desee mostrar la hora de apertura y cierre como objetos de Date
, por lo que sería más fácil compararlos con la fecha actual. También debería considerar usar un parcial para crear fechas porque sabemos que el año, el mes y el día del mes serían constantes entre todos los registros de programación. También se recomienda utilizar las interfaces proporcionadas por JS para manipular las fechas cuando sea posible. Aquí mejor usamos toLocaleString
para obtener el formato de hora que deseamos. Entonces, el siguiente fragmento de código podría ser útil:
const currentDate = new Date(); const createShceduleDate = (hours, minutes) => new Date( currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), hours, minutes ); const get12HourDate = (date) => date.toLocaleString("en-US", { hour: "numeric", hour12: true }); const schedule = [ ["Sunday", createShceduleDate(13, 0), createShceduleDate(17, 0)], ["Monday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ["Tuesday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ["Wednesday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ["Thursday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ["Friday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ["Saturday", createShceduleDate(9, 0), createShceduleDate(22, 0)], ]; const matchingDate = schedule[currentDate.getDay()]; if (matchingDate[1] <= currentDate && matchingDate[2] >= currentDate) { console.log( `We are currently open. (${matchingDate[0]}, from ${get12HourDate( matchingDate[1] )} to ${get12HourDate(matchingDate[2])})` ); } else { document.getElementById( "example" ).innerHTML = `We are currently closed. We will open at ${get12HourDate( schedule[(currentDate.getDay() + 1) % 6][1] )}`; }
<p id="example"></p>
Escribiría una función de ayuda para convertir horas militares a am/pm.
const now = new Date(); const hoursOfOperation = [ {open: 13, close: 17}, {open: 9, close: 22}, {open: 9, close: 22}, {open: 9, close: 22}, {open: 9, close: 22}, {open: 9, close: 19}, {open: 9, close: 17} ]; function hourToString(hour) { if (hour === 0) return "Midnight"; else if (hour === 12) return "Noon"; else if (hour > 12) return `${hour-12} PM`; else return `${hour} AM`; // Shorter version without Midnight and Noon // return ((hour + 11) % 12 + 1) + (hour >= 12 ? " PM":" AM"); } const today = hoursOfOperation[now.getDay()]; if (now.getHours() >= today.open && now.getHours() < today.close) { document.getElementById('example').innerHTML = `We are open today from ${hourToString(today.open)} to ${hourToString(today.close)}`; } else { const nextDay = hoursOfOperation[(now.getDay() + 1) % 6]; document.getElementById('example').innerHTML = `We are currently closed. We will open tomorrow at ${hourToString(nextDay.open)}`; }
<div id='example'></div>
Usaré una función para convertir la hora militar.
function convertTime24to12(militarytime) { let time = militarytime/100 let hours = parseInt(time, 10)-12 return hours } var d = new Date(); var n = d.getDay(); var now = d.getHours() + "." + d.getMinutes(); var weekdays = [ ["Sunday", 13.00, 1700], ["Monday", 9.00, 2200], ["Tuesday", 9.00, 2200], ["Wednesday", 9.00, 2200], ["Thursday", 9.00, 2200], ["Friday", 9.00, 1900], ["Saturday", 9.00, 1700] ]; var day = weekdays[n]; if (now > day[1] && now < day[2] || now > day[3] && now < day[4]) { // console.log("We are open today from "+ day[1]); console.log("We are open today from "+day[1]+"AM"+" to "+convertTime24to12(day[2])+"PM"); // document.getElementById('example').innerHTML = "We are open today from "+day[1]+"AM"+" to "+convertTime24to12(day[2])+"PM"; } else { console.log("We are currently closed. We will open at " + day[1]); // document.getElementById('example').innerHTML = "We are currently closed. We will open at"+ day[1]; }