簡體   English   中英

一周中的每一天都顯示一個給定的數字,然后回到 JS 中的第 1 天

[英]show a given number every day of the week, then get back to day 1 in JS

我需要在 div 中創建一個給定的數字,一周中的每一天的數字都不同,但在一周的最后一天結束時,數字應該是第一天的數字。 我試圖制作這個腳本,但我只能顯示第 1 天的數字,第 2 天、第 4 天等根本沒有改變,我做錯了什么?

順便說一句,我有幾個 div,每個 div 的數字必須不同,所以我使用Content.makeNumber = function (day1, day2, day3, day4, day5, day6, day7 。而且數字應該在之后增加重新加載,所以我從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;

JavaScript 的日期有一個getDay function 返回一個從 1 到 7 的數字,你可以使用它。

或者,模( % )也適用於您

switch (dateCount % 7 + 1) {
...
}

可能對你有用

 for(let i = 0; i <= 32; i ++){ console.log(i, " becomes: ", i % 7 + 1) }

僅當設置了本地存儲中的“日期”變量時,您才調用 Date.now()。 當你這樣做時,你在 localstorage 中設置了“dateWeekEnd”並且不再更新它。 這導致它不會改變。

我想你想要的是替換

const dateNow = Number(localStorage.getItem('dateWeekEnd'));

const dateNow = Date.now()

以便它根據當前日期進行更新。

我們還想稍微改變一下 DateCount 的數學。 它應該是

const dateCount = Math.floor(((dateNow - date) / week)*7)%7;

因為 (dateNow-date) 給出了自 date 以來已經過去了多少毫秒,除以周告訴我們一周的哪一部分已經過去。 乘以 7 得到當天。 將它放低以獲得 integer 而不是小數。 取模 7,因此如果達到 7,它會循環回 0。然后 dateCount 是從 0-6 的 integer。 要保留當前的 switch 語句,請添加 1 使其成為 1-7。

但是,我建議使用數組來存儲日期單詞,並使用 dateCount 作為該數組的索引以避免長的 switch 語句。 總之,這給了我們

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;

其中 dateWords 是一個包含 [day1, day2, ... day7] 的數組

要進一步清理它,請考慮將 week 變量替換為 day 變量會如何改變數學,以及是否需要在 localstorage 中設置 dateWeekEnd。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM