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
var storage = { // Зачем вообще такая табличная форма нужна?
Mname: [
{ mname: "vk" },
{ mname: "tg" },
{ mname: "inst" },
{ mname: "facebook" }
],
Link: [
{ link: val.vk },
{ link: val.tg },
{ link: val.inst },
{ link: val.facebook }
]
}
var storageForSubmit = { // Почему один и тот же объект постоянно перезаписывается?
Mname: "",
Link: ""
}
for (var i = 0; i < storage.Link.length; i++) {
storageForSubmit.Mname = storage.Mname[i].mname // А не проще было бы for-of сделать?
storageForSubmit.Link = storage.Link[i].link
form.append("Media", JSON.stringify(storageForSubmit))
SubmitDataLinks(storageForSubmit) // Вот сюда в итоге один и тот же объект будет отправляться
}
function SubmitDataLinks(storageForSubmit) { // storageForSubmit даже не используется
$(document).ready(function(){// зачем оно в .ready обёрнуто???
$.ajax({
type: "POST",
url: "@Url.Action("SaveFile")",
data: form, // Поведение при использовании FormData недокументировано
processData: false,
contentType: false, // Поведение при contentType=false недокументировано
success: function () {
console.log("Успешно!")
},
error: function () {
console.log("Ошибка!")
}
})
})
}
[HttpPost]
public void SaveFile([FromBody] UploadMedia data)
{
Console.WriteLine(data);
}
public record UploadMedia(string MediaName, string MediaLink);
document.addEventListener('DOMContentLoaded', () => {
const saveFileEndpoint = '@Url.Action("SaveFile")';
const readLinks = () => ({
"vk": document.querySelector("input.link-vk").value,
"tg": document.querySelector("input.link-tg").value,
"inst": document.querySelector("input.link-inst").value,
"facebook": document.querySelector("input.link-facebook").value,
})
const submitLinks = async (links) => {
for (const mediaWithLink of links) {
await fetch(saveFileEndpoint, {
method: "POST",
body: JSON.stringify(mediaWithLink),
headers: {
"Content-Type": "application/json"
}
})
}
}
const onSaveLinks = async () => {
const allLinks = readLinks();
const linksList = Object.keys(allLinks).map(key => ({ "MediaName": key, "MediaLink": allLinks[key] }));
try {
await submitLinks(linksList);
console.log("Ссылки сохранены");
} catch (e) {
console.error(`Произошла ошибка при отправке ссылок: ${e.message}`);
}
};
document.querySelector("button.save-links").addEventListener("click", onSaveLinks);
});