Как я могу автоматически сохранять данные API непосредственно в базу данных или локальное хранилище, используя определенный часовой пояс?

#javascript #api #datetime #web #local-storage

#javascript #API #дата и время #веб #локальное хранилище

Вопрос:

Я задал этот вопрос в Stack Overflow, потому что я не мог решить небольшую проблему, с которой я имел дело в течение длительного времени.

Одна проблема, которую я не понимаю, заключается в:

  • Мне нужна функция, которая автоматически устанавливает данные из API и автоматически сохраняет их непосредственно в локальное хранилище или базу данных по определенному местному часовому поясу, используя чистый javascript.
  • Я хочу, чтобы данные автоматически сохранялись в localStorage или Database в 12:01 по местному времени и 4:30 вечера, а затем отображались в HTML DOM.
  • Я хочу, чтобы API получал данные обновления каждые секунды.

Пожалуйста, взгляните на некоторые коды, которые я написал сам.

     /* ---------------------------------------------------------------------- */
    /* -------------------------- Retrieve API ------------------------- */
    /* ---------------------------------------------------------------------- */

    // Fetch Meow Data Main();
    const pjk_Meow = async () => {
        const base = 'aHR0cHM6Ly90d29';
        const cors = atob('aHR0cHM6Ly9jb3JzLmNo');
        const pjk_meow = atob(base);

        try {
            const res = await fetch(cors   pjk_meow);
            const data = await res.json();

            return data;
        } catch (error) {
            return error.message;
        }
    };

    /* ---------------------------------------------------------------------- */
    /* -------------------------- Schedule and Save to Local Storage ------------------------- */
    /* ---------------------------------------------------------------------- */

    // // 12:00 PM Request Data
    const pjk_Meow_4 = async () => {
        const base = 'aHR0cHM6Ly90d29';
        const cors = atob('aHR0cHM6Ly9jb3JzLmNoY');
        const pjk_meow = atob(base);

        // Set default time what I want it to.
        let d_time = '12:03:12 PM';
        let d_time_2 = '12:10:12 PM';
        let current_time = new Date().toLocaleTimeString();


        try {
            if (current_time === d_time || current_time <= 13) {
                try {
                    const res = await fetch(cors   pjk_meow);
                    const data = await res.json();

                    // Working with LS
                    let data_serialized = JSON.stringify(data);
                    localStorage.setItem('afternoon', data_serialized);

                    return data_serialized;
                } catch (error) {
                    return false;
                }
            }
        } catch (error) {
            return false;
        }
    };
    pjk_Meow_4();

    // 12:00 PM Callback and output to html
    const twelve_pm = () => {
        setInterval(() => {
            try {
                let third_Data = JSON.parse(localStorage.getItem('afternoon'));

                const setThird = document.getElementById('setThird');
                const valueThird = document.getElementById('valueThird');
                const resultThird = document.getElementById('resultThird');

                // If there is no any data in LS, this condition will run
                if (localStorage.length <= 0 || localStorage === undefined) {
                    setThird.innerText = '------';
                    valueThird.innerText = '-------';
                    resultThird.innerText = '--';
                }

                // Destructuring 12:00 PM Result
                const { set, val, result } = third_Data;

                // Check time and get data
                setThird.innerText = set;
                valueThird.innerText = val;
                resultThird.innerText = resu<
            } catch (error) {
                return false;
            }
        }, 3000);
    };
    twelve_pm();

    // // 4:30 PM Request Data
    const pjk_Meow_3 = async () => {
        const base = 'aHR0cHM6Ly90d29kLml0';
        const cors = atob('aHR0cHM6Ly9jb3J');
        const pjk_meow = atob(base);

        // Set default time what I want it to.
        let d_time_1 = '04:35:00 PM';
        let d_time_2 = '16:35:00 PM';
        let current_time = new Date().toLocaleTimeString();

        // let current_time = new Date().getHours();
        try {
            if (current_time === d_time_1 || current_time >= d_time_2) {
                try {
                    const res = await fetch(cors   pjk_meow);
                    const data = await res.json();

                    // Working with LS
                    let data_serialized = JSON.stringify(data);
                    localStorage.setItem('evening', data_serialized);

                    return data_serialized;
                } catch (error) {
                    console.log(error.message);
                }
            }
        } catch (error) {
            return false;
        }
    };
    pjk_Meow_3();

    // 4:30 PM Callback and output to html
    const four_pm = () => {
        setInterval(() => {
            try {
                let second_Data = JSON.parse(localStorage.getItem('evening'));

                const setSec = document.getElementById('setSec');
                const valueSec = document.getElementById('valueSec');
                const resultSec = document.getElementById('resultSec');

                // If there is no any data in LS, this condition will run
                if (localStorage.length <= 0 || localStorage === undefined) {
                    setSec.innerText = '------';
                    valueSec.innerText = '-------';
                    resultSec.innerText = '--';
                }

                // Destructuring 12:00 PM Result
                const { set, val, result } = second_Data;

                // Check time and get data
                setSec.innerText = set;
                valueSec.innerText = val;
                resultSec.innerText = resu<
            } catch (error) {
                return false;
            }
        }, 3000);
    };
    four_pm(); 
  

или

Пожалуйста, взгляните на некоторые обновленные коды, которые я написал.

 // Set the default time what I want to save to the localStorage
        let d = new Date();
        let h = d.getHours();
        let m = d.getMinutes();
        let compile = `${h}:${m}`;

        try {
            if (compile === '4:30' || compile >= '16:30') {
                try {
                    const res = await fetch(cors   pjk_meow);
                    const data = await res.json();

                    // Working with LS
                    let data_serialized = JSON.stringify(data);
                    localStorage.setItem('evening', data_serialized);

                    return data_serialized;
                } catch (error) {
                    console.log(error.message);
                }
            }
        } catch (error) {
            return false;
        }
  

Комментарии:

1. Значение, возвращаемое new Date().toLocaleTimeString() , зависит от реализации, поэтому сравнение его с фиксированной строкой всегда приведет к сбою для некоторых (большинства?) пользователей. Для меня это выдает «11: 21:33». Кроме того, это строка, поэтому current_time <= 13 почти наверняка всегда будет false .

2. Да, у вас есть какие-либо идеи по ссылкам, предоставленным с некоторыми примерами кодов, с использованием javascript для конкретной функции времени?

3. Кстати, я ценю, что вы оставили комментарий.

4. Использование реляционных операторов для сравнения строк чревато (вы сравниваете подстроки или единицы кода, а не числа), гораздо лучше сохранять часы и минуты в виде чисел и сравнивать с числами. Преобразовать, скажем, в минуты, так m = h * 60 что тогда if (m == 270 || m >= 990) .