Ответы пользователя по тегу JavaScript
  • Как перевести значение "1 день" в секунды? А еще как перевести значение "1 день" например в 19.05.2023 1:42?

    vabka
    @vabka
    Токсичный шарпист
    Простейшая арифметика из третьего класса школы + немного гуглежа по поводу работы со временем в js.
    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 СПРАВЛЯЕТСЯ

    Запрос:

    /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'


    Ответ написан
    7 комментариев
  • Почему этот простой JS код в React-е не работает?

    vabka
    @vabka
    Токсичный шарпист
    ChatGPT-программисты... (с) Mikhail Osher

    Тебе нужно обрабатывать клик и отслеживать состояние внутри компонента:
    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;
    Ответ написан
    Комментировать
  • Как взять контекстное меню в телеграмме?

    vabka
    @vabka
    Токсичный шарпист
    Есть две реализации телеграма в браузере:
    Z: https://github.com/Ajaxy/telegram-tt
    K: https://github.com/morethanwords/tweb

    Но учитывай, что там всё крайне велосипедное и врядли тебе пользу принесёт.
    Ответ написан
    Комментировать
  • Как определить наличие расширения в браузере/ приложения на мобильном устройстве?

    vabka
    @vabka
    Токсичный шарпист
    Можно попробовать добавлять при помощи расширения какой-нибудь новый блок в DOM. и при помощи js на сайте проверять его наличией.
    Ответ написан
  • Как запустить файл в replit с помощью бота?

    vabka
    @vabka
    Токсичный шарпист
    Почему бы не запускать код в изолированном контейнере на той же машине, где и бот работает?
    replit точно не предназначен для решения вашей задачи.
    Ответ написан
    Комментировать
  • Docker в Windows, Linux переводы строк, как правильно?

    vabka
    @vabka
    Токсичный шарпист
    Вариант раз: писать логи в stdout и пусть сам Docker или какой-нибудь vector их перенаправит куда следует в нужном формате.

    Вариант два: Забить и настроить инструмент, который читает файлы на винде так, чтобы он LF считал за нормальный перенос строки.
    Ответ написан
    Комментировать
  • Как сделать запрос к такому JSON файлу?

    vabka
    @vabka
    Токсичный шарпист
    Перебирай в цикле каждый элемент, пока не найдёшь элемент с искомым id - из него и бери amount
    Ответ написан
    Комментировать
  • Как настроить время в vscode?

    vabka
    @vabka
    Токсичный шарпист
    Время правильное. На это даже буква Z в конце метки времени намекает, что это время по Гринвичу.

    Вот несколько вариантов, как можно вывести в нужном часовом поясе:
    https://stackoverflow.com/questions/17415579/how-t...
    Ответ написан
    8 комментариев
  • Как получить ключ c google authenticator?

    vabka
    @vabka
    Токсичный шарпист
    Логично, что нужно просто загуглить библиотеки для totp для js:
    https://www.npmjs.com/package/otplib
    Ответ написан
    Комментировать
  • Как записать информацию в json внутри приложения Vue.js?

    vabka
    @vabka
    Токсичный шарпист
    Что сериализации/десериализации json используются функции JSON.stringify и JSON.parse.

    Если тебе нужно сохранить файл на том же компьютере, на котором открыт сайт, то ты можешь использовать два варианта:
    1. FileSystem API (достаточно сложно на самом деле. Я не буду давать пример его использования)
    2. Использовать хак с невидимой ссылкой на скачивание.
    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();
    }


    Для чтения файла можно использовать FileReader:
    https://itchief.ru/javascript/filereader
    Ответ написан
    Комментировать
  • Что такое multiple в рамках AJAX запроса?

    vabka
    @vabka
    Токсичный шарпист
    Работаю с бэкендом. От туда комментарий:

    Во первых - почему бы у коллег прямо не спросить раз у них в документации примеров нет?

    А во вторых есть ещё варианты:
    Раз: site.ru/?par1=1&par1=2&par1=3
    Два: site.ru/?par1[]=1&par1[]=2

    Вообще из-за того что HTTP никак не стандартизирован способ передачи списка параметров - каждый велосипедит что хочет.
    Ответ написан
    3 комментария
  • Как сделать POST запрос с использованием JS внутри PDF файла?

    vabka
    @vabka
    Токсичный шарпист
    Из-за того что отправка HTTP запросов из документа - очевидная уязвимость, большинство pdf-ридеров тупо запрещает такие запросы.
    (Иногда разрешает с разрешения пользователя. Иногда разрешает к доверенным сайтам)

    Вполне возможно, что код у вас корректный и проблема на стороне ридера.

    Вот кстати аналогичный вопрос с SO:
    https://stackoverflow.com/questions/53310315/send-...
    Ответ написан
    Комментировать
  • Как сделать сохранения на сервер яндекс игр?

    vabka
    @vabka
    Токсичный шарпист
    В документации сказано, что data - это объект => можно.
    https://yandex.ru/dev/games/doc/dg/sdk/sdk-player.html
    Ответ написан
    Комментировать
  • Есть игра на подобии куки кликера, как выводить баланс из бд?

    vabka
    @vabka
    Токсичный шарпист
    1. Можно использовать вебсокеты - тогда соединение будет поднято только 1 раз и бэк сможет "пушить" события на фронт.

    2. Если игра не рандомная, то можно часть вычислений производить на фронте, а на бэк идти только тогда, когда что-то должно измениться или для того чтобы синхронизироваться на всякий случай.
    Ответ написан
  • Почему выводятся одно и то же значение несколько раз?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Код на js сейчас на столько плохой и запутанный, что легче его полностью переписать, чем разбираться, что в нём не так.
    Больше всего у меня подозрений на странную функцию SubmitDataLinks и странное перекладывание данных из одного в другое в обработчике нажатия на кнопку
    Спойлер

    Перекладывание
    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("Ошибка!")
                    }
                })
                })
            }




    1. Меняем серверную часть:
    Контроллер:
    [HttpPost]
    public void SaveFile([FromBody] UploadMedia data)
    {
      Console.WriteLine(data);
    }


    UploadMedia:
    public record UploadMedia(string MediaName, string MediaLink);


    2. Меняем нафиг весь js:
    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);
    });
    Ответ написан
    Комментировать
  • Можно ли теги hreflang генерировать в моменте при загрузке страницы?

    vabka
    @vabka
    Токсичный шарпист
    Лучше прописать вручную, если в этом облачном сервисе нет шаблонизатора на стороне сервера.

    Но эксперимент можно провести - небо на голову не упадёт
    Ответ написан
    1 комментарий
  • Как задать параметр offset для GitHub REST API в search repositories?

    vabka
    @vabka
    Токсичный шарпист
    Документацию не читаем, да?
    Там же целый раздел про пагинацию есть
    https://docs.github.com/en/rest/guides/using-pagin...
    Ответ написан
  • Как обычно делают сканирование (raycast) в играх?

    vabka
    @vabka
    Токсичный шарпист
    Если я вас правильно понял, то под "сканированием" вы понимаете так называемый raycast.

    Делают отталкиваясь от ожидаемого поведения.
    Обычно либо каждый кадр (или каждый физический кадр), либо по нажатию на кнопку.
    Либо если нужно очень много кастов (на столько много, что производительность падает), то каждые N физических кадров/тиков.

    Сколько всего этих объектов и сколько рейкастов им нужно?
    Для чего именно?

    Например если ты делаешь оружие с рейкастом, то логично, что нет смысла делать каст каждые N секунд - тут больше смысл по требованию его запускать (например по нажатию на кнопку мыши)

    Если ты делаешь дальномер, на котором постоянно должны меняться показания - тоже логично, что нужно не каждые N секунд, а каждый кадр запускать для каждого такого дальномера.

    Или если делаешь такой дальномер/сканер, который по описанию должен раз в N секунд подавать луч - тогда логично, что нет смысла тратить ресурсы на запуск каждый кадр.
    Ответ написан
  • Как получить город пользователя, зная IP?

    vabka
    @vabka
    Токсичный шарпист
    Можно использовать браузерный Geolocation API
    Ответ написан