사용자가 사이트에 입장 한 임의의 시간이 아닌 현재 시간을 색인으로 사용할 수 있습니다. 글을 쓰는
는, 현재의 타임 스탬프가 1493684749486.
var d = new Date();
// +d === 1493684749486
배열 인덱스로 현재 타임 스탬프를 변환하려면, 당신은 일주일에 밀리 세컨드의 수를 알 필요가 (1000 * 60 * 60 * 24 * 7), 여기에 대답을 위해서 1970 년
var index = Math.floor(+d/(1000*60*60*24*7));
// 2469 weeks have passed since 1970
// output `mind[index]` now.
경과 얼마나 많은 주 파악, 난 당신이 오전 9시에서 금요일에 항목을 변경하려는 가정거야. 오전 9시 금요일 다음 가장 가까운 315,250,514 밀리 초 거리에 1494000000000.
d.setMilliseconds(0);
d.setSeconds(0);
d.setMinutes(0);
d.setHours(9);
d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date.
입니다. 다음 변경을 시작하기 위해이 시간만큼 setTimeout을 사용합니다.
항목이 변경되면 다음 변경 사항에 대한 새로운 제한 시간이 시작됩니다. 이것은 setInterval보다 선호됩니다.
function displayNextItem() {
var d = new Date();
var timestamp = +d;
var index = Math.floor(timestamp/(1000*60*60*24*7));
wfmind.innerHTML = mind[index % mind.length];
d.setMilliseconds(0);
d.setSeconds(0);
d.setMinutes(0);
d.setHours(9);
d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date.
setTimeout(displayNextItem, +d - timestamp);
}
displayNextItem();
'localStorage'에 항목 및 배열 색인을 표시 한 시간을 저장하십시오. 그런 다음 다시 올 때 로컬 저장소에서 시간을 가져와 현재 시간과 비교하고 일주일이 넘으면 색인을 증가시키고 다음 번에 표시합니다. – Barmar
내가 잘 모르겠다. 지연 (현재 1000ms 또는 1 초)을 1 주로 변경하고 싶지만 실제로는 1 주를 기다리지 않으시겠습니까? 그것은 모순 된 것처럼 보인다. 디버깅 목적으로 1 초 또는 그 부근의 값을 유지하고 싶을 것입니다. – Extragorey
@Extragorey 나는 그가 setInterval()을 사용하여 일주일을 기다리는 것을 원하지 않는다고 생각한다. 아마도 사용자가 전체 시간 동안 페이지를 열지 않으므로 작동하지 않을 것입니다. – Barmar