Или например при выполнении скрипта на бэке записывать в базу результат а фронт будет через 5 минут спрашивать бэк все ли готово?
function yearDiff(dt1, dt2)
{
var diffYear =(dt2.getTime() - dt1.getTime()) / 1000;
diffYear /= (60 * 60 * 24);
return Math.abs(Math.round(diffYear/365.25));
}
if(message.length > 150) message.substring(0, 150)
function generateJsonPatch(obj1, obj2) {
const patch = [];
// Рекурсивно обходим все свойства первого объекта
for (const prop in obj1) {
if (obj1.hasOwnProperty(prop)) {
// Если свойство отсутствует во втором объекте, удаляем его
if (!obj2.hasOwnProperty(prop)) {
patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
} else {
// Если свойство является объектом или массивом, рекурсивно обходим его
if (typeof obj1[prop] === "object") {
patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
p.path = `/${prop}${p.path}`;
return p;
}));
} else {
// Если значение свойства отличается от значения во втором объекте, обновляем его
if (obj1[prop] !== obj2[prop]) {
patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
}
}
}
}
}
// Обходим свойства второго объекта, которых нет в первом объекте
for (const prop in obj2) {
if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
// Добавляем новое свойство
patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
}
}
return patch;
}
[ { op: 'replace', path: '/colorQty', value: 1, oldVal: 0 } ]
Напиши функцию на javascript, которая принимает в себя два js-объекта или массива, на выходе я должен получить jsonpatch, который можно применить к первому объекту, чтобы получился объект идентичный второму
... вариант без oldValue ...
добавь ещё в каждую операцию jsonpatch и старое значение, чтобы при чтении было понятно, что на что заменяется
Вот обновлённый код функцииgenerateJsonPatch
с добавлением старого значения в каждую операцию jsonpatch:
function generateJsonPatch(obj1, obj2) { const patch = []; // Рекурсивно обходим все свойства первого объекта for (const prop in obj1) { if (obj1.hasOwnProperty(prop)) { // Если свойство отсутствует во втором объекте, удаляем его if (!obj2.hasOwnProperty(prop)) { patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]}); } else { // Если свойство является объектом или массивом, рекурсивно обходим его if (typeof obj1[prop] === "object") { patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => { p.path = `/${prop}${p.path}`; return p; })); } else { // Если значение свойства отличается от значения во втором объекте, обновляем его if (obj1[prop] !== obj2[prop]) { patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]}); } } } } } // Обходим свойства второго объекта, которых нет в первом объекте for (const prop in obj2) { if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) { // Добавляем новое свойство patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined}); } } return patch; }
Каждая операция jsonpatch теперь содержит поле `oldVal`, которое хранит старое значение свойства, которое было изменено. Если свойство было удалено или добавлено, то `oldVal` будет иметь значение `undefined`.
Пример использования:
const obj1 = {a: {b: "hello"}, c: [1, 2, 3]}; const obj2 = {a: {b: "world", d: "foo"}, c: [1, 2, 4, 5], e: "bar"}; const patch = generateJsonPatch(obj1, obj2); console.log(patch); // Output: // [ // {"op":"replace","path":"/a/b","value":"world","oldVal":"hello"}, // {"op":"add","path":"/a/d","value":"foo","oldVal":undefined}, // {"op":"remove","path":"/c/2","oldVal":3}, // {"op":"add","path":"/c/3","value":5,"oldVal":undefined}, // {"op":"add","path":"/e","value":"bar","oldVal":undefined} // ]
Обратите внимание, что полеoldVal
в jsonpatch содержит информацию только о тех свойствах, которые были изменены или удалены. Если свойство не было изменено, то егоoldVal
будет иметь значениеundefined
.
function getTimerEndFromNow(prompt) {
return getTimerEndFrom(new Date(), prompt);
}
function getTimerEndFrom(start, prompt) {
return new Date(start.valueOf() + getSecondsByPrompt(prompt) * 1000);
}
function getSecondsByPrompt(prompt) {
const [count, measure] = prompt.split(' ');
return count * getSecondsByMeasure(measure);
}
function getSecondsByMeasure(measure) {
switch(measure.toLowerCase()) {
case 'день': return 60 * 60 * 24;
case 'час': return 60 * 60;
case 'минута': return 60;
default: throw new Error(`Unknown measure ${measure}`);
}
}
/gpt
Мне нужно перевести значение "1 день"/"1 час"/"1 минута" в секунды для таймера. А точнее функция, но я вообще не знаю как это сделать. И еще одну функцию для того что бы например таймер получил сегодня а пишется во сколько он закончится, точнее например в 19.05.2023 1:42
Напиши функции на js
Для перевода "1 день"/"1 час"/"1 минута" в секунды можно использовать следующую функцию:
function convertToSeconds(time) { const timeArr = time.split(' '); const value = parseInt(timeArr[0]); const unit = timeArr[1]; switch (unit) { case 'день': return value * 24 * 60 * 60; case 'час': return value * 60 * 60; case 'минута': return value * 60; default: return 0; } }
Пример использования:
const secondsInDay = convertToSeconds('1 день'); // 86400 const secondsInHour = convertToSeconds('1 час'); // 3600 const secondsInMinute = convertToSeconds('1 минута'); // 60
Для форматирования даты в строку можно использовать объект `Date` и методы `getFullYear()`, `getMonth()`, `getDate()`, `getHours()`, `getMinutes()`, `getSeconds()`:
function formatDate(date) { const year = date.getFullYear(); const month = addLeadingZero(date.getMonth() + 1); const day = addLeadingZero(date.getDate()); const hours = addLeadingZero(date.getHours()); const minutes = addLeadingZero(date.getMinutes()); const seconds = addLeadingZero(date.getSeconds()); return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`; } function addLeadingZero(value) { return value < 10 ? '0' + value : value; }
Пример использования:
const endDate = new Date(2023, 4, 19, 1, 42, 0); const formattedDate = formatDate(endDate); // '19.05.2023 01:42:00'
import React, { Component } from 'react';
import styles from './Header.module.scss'
const Header = () => {
const [active, setActive] = useState(false);
const onAccordionClicked = () => setActive(!active);
return (
<header className={styles}>
<div>
Hounter
</div>
<nav>
<ul>
<li style={{width: '96px'}}>About Us</li>
<li style={{width: '78px'}}>Article</li>
<li id='li_btn' style={{width: '122px'}}
className={styles.accordion + active ? styles.active : ""}
onClick={onAccordionClicked}>
Property
<a className={styles.panel} href='#'>House</a>
<a className={styles.panel} href='#'>Villa</a>
<a className={styles.panel} href='#'>Appartment</a>
</li>
</ul>
<button className={styles.btn}>Sign Up!</button>
</nav>
</header>
);
};
export default Header;
JSON.stringify
и JSON.parse
.const obj = { "hello": "world"};
const fileText = JSON.stringify(obj);
const fileName = "example.json";
const pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileText));
pom.setAttribute('download', fileName);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
}
else {
pom.click();
}
Работаю с бэкендом. От туда комментарий:
site.ru/?par1=1&par1=2&par1=3
site.ru/?par1[]=1&par1[]=2