sec
см. URL.searchParams:const params = (new URL(document.location)).searchParams;
const sec = Number(params.get('sec')) || 5; // или 5 по умолчанию
const future = new Date();
future.setTime(future.getTime() + 1000 * sec);
future
.const update = () => {
const diff = future.getTime() - Date.now(); // сколько осталось, в миллисекундах
const secondsLeft = Math.round(diff / 1000); // сколько осталось секунд
if (diff <= 0) {
// время прошло
} else {
// обновить в кнопке число оставшихся секунд
// и вызвать это обновление снова через чуть-чуть:
setTimeout(update, 200);
}
}
update();
Number()
при вызове как функции, конвертирует аргумент в численный тип. Если не получается, возвращает NaN
(Not A Number) – специальное значение, которое при конвертации в булев даёт false
. (! Number(value))
сработает когда переданное не перевести в число, или когда число 0
.Number()
довольно строг с конвертацией в число, по сравнению даже с parseInt()
:parseInt("123HabraHabr") // 123
Number("123HabraHabr") // NaN
Number()
проглотил бы как число, но при этом она содержала код, который JS как-то интерпретирует. Типа '123 & alert("Habr!")'
– но нет, через Number()
это не пролезет, увы. дата:ip
. Например SET "20210205:192.168.1.5" ""
— для каждого ip создавать ключ с пустой строкой.KEYS "20210205:*"
и сохранит собранные IP в БД.HINCRBY "дата" "ip" 1
См. HINCRBYreduce()
в передаваемом объекте добавьте поле для передачи индекса баннера.i
и сохранять его в объекте;const container = document.querySelector(".js-cards");
const cards = [...container.children].reduce(function (obj, item, i) {
if ("card" in item.dataset) {
obj[item.dataset.card] = (obj[item.dataset.card] || []).concat(item);
obj["all"] = (obj["all"] || []).concat(item);
if (obj.hasOwnProperty('bannerIndex')) delete obj.bannerIndex;
} else {
if (! obj.hasOwnProperty('bannerIndex')) obj.bannerIndex = i;
obj["banners"] = (obj["banners"] || []).concat({ item: item, index: obj.bannerIndex });
}
return obj;
}, {});
console.log(cards);
.then()
добавьте что-то типа .catch(err => console.error(err))
;
util.status('test')
.then(...)
.then(() => setTimeout(relOnline, 500)
.catch((err) => console.error(err))
$potolok = 50 * ceil($random / 50);
$message = "Меньше ${potolok}";
определит ближайшее бóльшее, шагами по 50. // $api_json = ''; // тут текст из ответа API
$data = json_decode($api_json, true);
$all_streets = [];
foreach ($data as $city) {
$city_name = $city['name'];
$city_id = $city['id'];
$city_streets = $city['streets'];
foreach ($city_streets as $street) {
$all_streets[] = [
'id' => $street['id'],
'name' => $street['name'],
// может, и параметры города сюда же?
'city' => $city_name,
'city_id' => $city_id,
];
}
}
z = 3 ch2t + i · 2 sh2t
формула даёт комплексное число.ch()
наверное гиперболический косинус cosh()
, а sh()
такой же синус. input
.disabled
, чтобы не хотелось в него что-то вписать.