Necesito hacer un número dado en un div, los números son diferentes para cada día de la semana, pero al final del último día de la semana, el número debe ser el del primer día. Traté de hacer este script, pero solo puedo mostrar el número del día 1, día 2, 4, etc. no cambia en absoluto, ¿qué estoy haciendo mal?
Por cierto, tengo algunos divs, y los números deben ser diferentes para cada div, así que uso Content.makeNumber = function (day1, day2, day3, day4, day5, day6, day7 para ello. Y el número debería aumentar incluso después recargar, así que tomo la fecha de localStorage
const Content = {}; Content.makeNumber = function (day1, day2, day3, day4, day5, day6, day7) { let date = localStorage.getItem("date"); const week = 60*60*24*7; if (date === null) { const now = Date.now(); localStorage.setItem('date', 'now'); localStorage.setItem('dateWeekEnd', 'now' + 'week'); return day1; } else { } date = Number(localStorage.getItem('date')); const dateNow = Number(localStorage.getItem('dateWeekEnd')); const dateCount = (dateNow - date) / week; let res switch (dateCount) { case 1: res = day1; break; case 2: res = day2; break; case 3: res = day3; break; case 4: res = day4; break; case 5: res = day5; break; case 6: res = day6; break; case 7: res = day7; break; default: res = day1; break; } return res; }; export default Content;La fecha de JavaScript tiene una función getDay que devuelve un número del 1 al 7, podría usar eso.
Alternativamente, el módulo ( % ) también funcionará para usted
switch (dateCount % 7 + 1) { ... }podría funcionar para usted
for(let i = 0; i <= 32; i ++){ console.log(i, " becomes: ", i % 7 + 1) }Está llamando a Date.now() solo si la variable "fecha" del almacenamiento local está configurada. Cuando hace esto, configura "dateWeekEnd" en el almacenamiento local y no lo actualiza nuevamente. Esto hace que no cambie.
Creo que lo que quieres es reemplazar
const dateNow = Number(localStorage.getItem('dateWeekEnd'));con
const dateNow = Date.now()para que se actualice en función de la fecha actual.
También queremos cambiar un poco las matemáticas en DateCount. Debería ser
const dateCount = Math.floor(((dateNow - date) / week)*7)%7;porque (dateNow-date) nos da cuántos milisegundos han pasado desde la fecha, dividir por semana nos dice qué parte de una semana ha pasado. Multiplica por 7 para obtener el día. Piso para obtener un número entero en lugar de un decimal. Tómelo en módulo 7 para que vuelva a 0 si llega a 7. Entonces dateCount es un número entero de 0-6. Para mantener su declaración de cambio actual, agregue 1 para que sea 1-7.
Sin embargo, recomendaría usar una matriz para almacenar las palabras del día y usar dateCount como un índice de esa matriz para evitar las declaraciones de cambio largas. En total esto nos da
const Content = {}; Content.makeNumber = function (dateWords) { let date = localStorage.getItem("date"); const week = 60*60*24*7; if (date === null) { const now = Date.now(); localStorage.setItem('date', 'now'); localStorage.setItem('dateWeekEnd', 'now' + 'week'); } date = Number(localStorage.getItem('date')); const dateNow = Date.now(); const dateCount = Math.floor(((dateNow - date) / week)*7)%7; let res = dateWords[dateCount] return res; }; export default Content;donde dateWords es una matriz que contiene [day1, day2, ... day7]
Para limpiarlo aún más, considere cómo reemplazar la variable de semana con una variable de día cambiaría las matemáticas, y si necesita establecer la fecha de fin de semana en el almacenamiento local.