#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)
.