const isSameDay = (d1, d2) => d1.getFullYear() === d2.getFullYear()
&& d1.getMonth() === d2.getMonth()
&& d1.getDate() === d2.getDate();
const compareDates = (ms1, ms2) => {
const d1 = new Date(ms1);
const d2 = new Date(ms2);
if (isSameDay(d1, d2)) return "SAME_DAY";
d1.setDate(d1.getDate() + 1); // тут и месяц и год добавятся, если надо
if (isSameDay(d1, d2)) return "NEXT_DAY";
return "OTHER";
}
compareDates(1635688540289, 1635688540289) // "SAME_DAY"
compareDates(1635688540289, 1635768540289) // "NEXT_DAY"
compareDates(1635688540289, 0) // "OTHER"
echo preg_replace('#Вода#', '', $something, 1);
// ,Огонь,Вода,Вода,Трава,Небо
Четвёртый параметр – лимит числа замен. Максимум одна замена. <h4><input type="radio" id="small" value="10" zamena="20">Маленька</h4>
Для такого элемента заменить значение value
значением из атрибута zamena
можно так:const replaceValue = (el) => {
el.value = el.getAttribute("zamena");
}
replaceValue(document.getElementById("small"));
zamena
лучше пользоваться data-атрибутами.data-*
атрибутах. Например:<p data-price="100" data-size="Small" data-color="Red"></p>
Получать их значение через свойство dataset
: const element = document.querySelector("p");
element.dataset.color // "Red"
<div class="timer" data-till="1635800892"></div>
const D = new Date( 1000 * document.querySelector(".timer").dataset.till );
В JavaScript время считают не в целых секундах, а точнее, в миллисекундах, поэтому секундное время из разметки надо домножить на 1000. datetime.datetime
можно сравнивать простыми операторами <, >import datetime
""" сейчас, интервал в 2 недели, и дата 2 недели назад """
now = datetime.datetime.now()
twoweeks = datetime.timedelta(days=14)
backdate = now - twoweeks
""" список дат """
a = datetime.datetime(2020, 01, 01)
b = datetime.datetime(2021, 01, 01)
c = datetime.datetime(2021, 10, 18)
date_list = [a, b, c]
""" отобрать только недавние """
recent = filter(lambda x: x > backdate, date_list)
возвращать нулевую строку массива
const str = "abcdef";
// индексы: 012345
str.slice(2, 4)
// от индекса 2, т.е. "c"
// до индекса 4 (но не включая его)
// т.е. до "e", но без самой "e"
// итого вернёт "cd"
Что значит в коде + "..."
"Hello" + " world!"
// получится "Hello world!"
"Понимаете?" + "..."
Что значит : str
if () then {} else {}
, но это выражение - туда нельзя засовывать дополнительные действя, как в if. Удобен для короткой записи, когда нужно вернуть то или иное значение, в зависимости от условия: let a = 5 > 2 ? "5 больше 2" : "5 не больше 2";
условие если верно если ложно
$input = [
["id" => "3", "name" => "Алёна", "rating" => "2159", ],
["id" => "199978927", "name" => "Wandermensil", "rating" => "6593", ],
["id" => "199983283", "name" => "Mirfshir", "rating" => "6320", ],
];
usort($input, fn($a, $b) => $b["rating"] - $a["rating"]);
/*
array(3) {
[0]=> array(3) { ["id"]=> string(9) "199978927" ["name"]=> string(12) "Wandermensil" ["rating"]=> string(4) "6593" }
[1]=> array(3) { ["id"]=> string(9) "199983283" ["name"]=> string(8) "Mirfshir" ["rating"]=> string(4) "6320" }
[2]=> array(3) { ["id"]=> string(1) "3" ["name"]=> string(10) "Алёна" ["rating"]=> string(4) "2159" }
}
*/
есть ощущение, что какой-то большой пласт теоретических знаний упущен
href
.Infinity
списал у 0xD34F само создающихся циклов
'a'
и остался массив на 1 короче: ['b', 'c', 'd']
\b
в регулярках означает границу слова – здесь подойдёт:const arr = ["catboy", "cat", "cat-man", "man, ?cat! doo"];
const filtStr = (str) => {
return arr.filter((item) => item.match(new RegExp(`\\b${str}\\b`, "i")));
};
console.log(filtStr("cat")); // [ "cat", "cat-man", "man, ?cat! doo" ]