Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.07.2023, 12:52
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

проверьте код
Всем привет,

нужно было написать хтмл код для онлайн шопа где прописывалось бы время когда можно забрать товар.

сразу скажу с кодом я даже не на ВЫ. Этот код мне сделал чатжопати и все вроде бы работает кроме скрипта с выходными. Если сегодня (после 16 часов) или завтра один отпускных дней, то должна выплюнуться дата след. свободного дня. Но он как то этот момент игрнорирует.

Заранее благодарю!

<!DOCTYPE html>
<html>
<head>
    <title>Versandtermin</title>
    <script>
        function getShippingDate() {
            var today = new Date();
            var day = today.getDay();
            var hour = today.getHours();
            var minute = today.getMinutes();
            var shippingDate = document.getElementById("shipping-date");
            var shippingTime = document.getElementById("shipping-time");
            var holidays = ["27.07.2023", "28.07.2023", "01.08.2023", "05.08.2023"];

            if (day >= 1 && day <= 5) {
                if (hour >= 0 && hour <= 9 && minute >= 1 && minute <= 59) {
                    shippingDate.innerHTML = "heute";
                    shippingTime.innerHTML = "ab 12 Uhr";
                } else if (hour >= 10 && hour <= 15 && minute >= 0 && minute <= 59) {
                    shippingDate.innerHTML = "heute";
                    var currentHour = hour + 2;
                    var roundedHour = Math.ceil(currentHour / 0.5) * 0.5;
                    shippingTime.innerHTML = "ab " + roundedHour + " Uhr";
                } else if (hour >= 16 && hour <= 23 && minute >= 1 && minute <= 59) {
                    shippingDate.innerHTML = "morgen";
                    shippingTime.innerHTML = "ab 12 Uhr";
                }
            } else if (day === 5 && hour >= 16 && hour <= 23 && minute >= 1 && minute <= 59) {
                var nextMonday = getNextMonday();
                shippingDate.innerHTML = "Am Montag den " + nextMonday;
                shippingTime.innerHTML = "ab 12 Uhr";
            } else if (day === 6 || day === 0) {
                var nextMonday = getNextMonday();
                shippingDate.innerHTML = "Am Montag den " + nextMonday;
                shippingTime.innerHTML = "ab 12 Uhr";
            } else if ((hour >= 16 && minute >= 0) || isNextDayHoliday()) {
                var nextFreeDay = getNextFreeDay();
                shippingDate.innerHTML = "Am " + nextFreeDay;
                shippingTime.innerHTML = "ab 12 Uhr";
            }
        }

        function getNextMonday() {
            var today = new Date();
            var day = today.getDay();
            var daysUntilNextMonday = 1 + (8 - day) % 7;
            var nextMonday = new Date(today.getFullYear(), today.getMonth(), today.getDate() + daysUntilNextMonday);
            return nextMonday.toLocaleDateString();
        }

        function isNextDayHoliday() {
            var today = new Date();
            var tomorrow = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
            var holidays = ["26.07.2023", "28.07.2023", "01.08.2023", "05.08.2023"];
            var tomorrowString = tomorrow.toLocaleDateString();
            return holidays.includes(tomorrowString);
        }

        function getNextFreeDay() {
            var today = new Date();
            var nextDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
            var holidays = ["26.07.2023", "28.07.2023", "01.08.2023", "05.08.2023"];
            while (holidays.includes(nextDay.toLocaleDateString()) || nextDay.getDay() === 6 || nextDay.getDay() === 0) {
                nextDay.setDate(nextDay.getDate() + 1);
            }
            return nextDay.toLocaleDateString();
        }
    </script>
</head>
<body onload="getShippingDate()">
    <h1>Versandtermin</h1>
    <p>Angestrebter Versand- / Abholtermin: <span id="shipping-date"></span> <span id="shipping-time"></span></p>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 26.07.2023, 14:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Uhu,
var следующий_рабочий_день
if(если текущая выходной или праздник или время после 16) следующий_рабочий_день с 12
else сегодня с 12
alles
Ответить с цитированием
  #3 (permalink)  
Старый 26.07.2023, 15:50
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

спасибо большое за ответ, но как говорил ранее с кодом совсем не дружу... не могли бы вы мне его подправить если не трудно?

условия такие:
-если сегодня Мо-Пт между 00:01 и 09:59, то вместо "Tag" должно стоять "heute" а вместо "Uhrzeit" - "ab 12 Uhr"
-если сегодня Мо-Пт между 10:00 и 15:59, то вместо "Tag" должно стоять "heute" а вместо "Uhrzeit" - "актуальное время + 2 часа округленное на 30 мин"
-если сегодня Мо-Чт между 16:01 и 23:59, то вместо "Tag" должно стоять "morgen" а вместо "Uhrzeit" - "ab 12 Uhr"
-если Пт между 16:01 и 23:59, то вместо "Tag" должно стоять "Am Montag + дата след. Понедельника" а вместо "Uhrzeit" - "ab 12 Uhr"
-если сегодня Сб-Вк между 00:01 и 09:59, то вместо "Tag" должно стоять "Am Montag + дата след. Понедельника" а вместо "Uhrzeit" - "ab 12 Uhr"
-Если сегодня (после 16 часов) или завтра один отпускных дней, то должна выплюнуться дата след. свободного дня. например 27.07.2023, 28.07.2023, 01.08.2023, 05.08.2023
Ответить с цитированием
  #4 (permalink)  
Старый 26.07.2023, 17:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Uhu,
условия некорректные завтрашнего утра и следующего понедельника, может не быть, если на этот день будет праздник.
Ответить с цитированием
  #5 (permalink)  
Старый 26.07.2023, 18:14
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

одно условие не может "перекрыть" другое? хммм.. надо подумать как решить

Последний раз редактировалось Uhu, 26.07.2023 в 18:16.
Ответить с цитированием
  #6 (permalink)  
Старый 26.07.2023, 18:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

время когда можно забрать товар
Uhu,

<!DOCTYPE html>
<html>

<head>
    <title>Versandtermin</title>
    <meta charset="utf-8">
    <script>
        function getShippingDate() {
            let today = new Date();
            let hour = today.getHours();
            let shippingDate = document.getElementById("shipping-date");
            let shippingTime = document.getElementById("shipping-time");
            let nextDay = getNextFreeDay(today);
            let Tag = `morgen ${nameWeekday(nextDay)} ${dateFormat(nextDay)}`;
            let Uhrzeit = "ab 12 Uhr";
            if (!isDayHoliday(today)) {
                if (hour < 10) {
                    Tag = "heute"
                } else if (hour < 16) {
                    Tag = "heute";
                    Uhrzeit = `ab ${hour+2} Uhr`
                }
            }
            shippingDate.innerHTML = Tag;
            shippingTime.innerHTML = Uhrzeit;

            function dateFormat(date) {
                let formatter = new Intl.DateTimeFormat("ru", {
                    day: "2-digit",
                    month: "2-digit",
                    year: "numeric"
                });
                return formatter.format(date)
            }

            function nameWeekday(date) {
                let formatter = new Intl.DateTimeFormat("de", {
                    weekday: "long"
                });
                return formatter.format(date)
            }

            function isDayHoliday(date) {
                let holidays = ["26.07.2023", "28.07.2023", "01.08.2023", "05.08.2023"];
                return holidays.includes(dateFormat(date)) || date.getDay() === 6 || date.getDay() === 0 || (date.getDay() === 5 && date.getHours() >= 16)
            }

            function getNextFreeDay(date) {
                do {
                    date.setDate(date.getDate() + 1);
                } while (isDayHoliday(date))
                return date;
            }
        }
        document.addEventListener('DOMContentLoaded', getShippingDate)
    </script>
</head>

<body>
    <h1>Versandtermin</h1>
    <p>Angestrebter Versand- / Abholtermin: <span id="shipping-date"></span> <span id="shipping-time"></span></p>
</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 27.07.2023, 13:46
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

переиграли все на яве, но что то неработаю праздники....
function getShippingDate() {
    var today = new Date();
    var day = today.getDay();
    var hour = today.getHours();
    var minute = today.getMinutes();
    var holidays = ["28.07.2023", "31.07.2023"];
    var shippingDate;
    var shippingTime;

    if (day >= 1 && day <= 5) {
        if (hour >= 0 && hour <= 9 && minute >= 1 && minute <= 59) {
            if (!isHoliday(getNextDay())) {
                shippingDate = "heute";
                shippingTime = "ab 12 Uhr";
            } else {
                shippingDate = getNextWorkDay();
            }
        } else if (hour >= 10 && hour <= 15 && minute >= 0 && minute <= 59) {
            if (!isHoliday(today)) {
                shippingDate = "heute";
                var currentHour = hour + 2;
                var roundedHour = Math.ceil(currentHour / 0.5) * 0.5;
                shippingTime = "ab " + roundedHour + " Uhr";
            } else {
                shippingDate = getNextWorkDay();
                shippingTime = "ab 12 Uhr";
            }
        } else if (hour >= 16 && hour <= 23 && minute >= 1 && minute <= 59) {
            if (!isHoliday(getNextDay())) {
                shippingDate = "morgen";
                shippingTime = "ab 12 Uhr";
            } else {
                shippingDate = getNextWorkDay();
                shippingTime = "ab 12 Uhr";
            }
        }
    } else if (day === 5 && hour >= 16 && hour <= 23 && minute >= 1 && minute <= 59) {
        shippingDate = getNextWorkDay();
        shippingTime = "ab 12 Uhr";
    } else if (day === 6 || day === 0) {
        shippingDate = getNextWorkDay();
        shippingTime = "ab 12 Uhr";
    }

    return "Angestrebter Versand- / Abholtermin: " + shippingDate + " " + shippingTime;
}

function isHoliday(date) {
    var dateString = date.toLocaleDateString();
    return holidays.includes(dateString);
}

function getNextDay() {
    var today = new Date();
    var nextDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
    return nextDay;
}

function getNextWorkDay() {
    var nextDay = getNextDay();
    while (isHoliday(nextDay) || nextDay.getDay() === 6 || nextDay.getDay() === 0) {
        nextDay.setDate(nextDay.getDate() + 1);
    }
    return nextDay.toLocaleDateString();
}

console.log(getShippingDate());
Ответить с цитированием
  #8 (permalink)  
Старый 27.07.2023, 14:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Uhu
но что то неработаю праздники....
так на праздники и выходные надо в первую очередь проверять, а у вас
Сообщение от Uhu
if (day >= 1 && day <= 5) {
похоже вы не читали
Сообщение от рони
if(если текущая выходной или праздник или время после 16)
чем не устраивает код в #6 ?
Ответить с цитированием
  #9 (permalink)  
Старый 27.07.2023, 14:42
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

Цитата:
так на праздники и выходные надо в первую очередь проверять, а у вас
видимо правду говорят что чатжопати потупел, я ему прописавал конкретно дни с ПН-ЧТ, ПТ и СБ+ВК...
например если сегодня ПН-ПТ между 00:01 и 9:59 а звтра нет отпуска то.... видимо ему не посилам
Цитата:
чем не устраивает код в #6 ?
он почему тоже неучитавает отпуск, там стоит сегодня отпуск а он пишет мож приходи забирай
Ответить с цитированием
  #10 (permalink)  
Старый 27.07.2023, 14:59
Uhu Uhu вне форума
Новичок на форуме
Отправить личное сообщение для Uhu Посмотреть профиль Найти все сообщения от Uhu
 
Регистрация: 26.07.2023
Сообщений: 6

мы немного изменили условия:
если сегодня ПН-ПТ между 00:01 и 9:59 и завтра не отпуск, то вместо "Tag" должно стоять "heute" (сегодня) а вместо "Uhrzeit" стоять "ab 12 Uhr", если же затра отпуск тогда вместо "Tag" стоит "дата след. свободный рабочий день" и время "ab 12 Uhr"

если сегодня ПН-ПТ между 10:00 и 15:59 и сегодня не отпуск, то вместо "Tag" должно стоять "heute" (сегодня) а вместо "Uhrzeit" стоять "актуальное время + 2 часа (округлить до 30 мин.", если же сегодня отпуск тогда вместо "Tag" стоит "дата след. свободный рабочий день" и время "ab 12 Uhr"

если сегодня ПН-ЧТ между 16:01 и 23:59 и завтра не отпуск, то вместо "Tag" должно стоять "morgen" (завтра) а вместо "Uhrzeit" стоять "ab 12 Uhr", если же затра отпуск тогда вместо "Tag" стоит "дата след. свободный рабочий день" и время "ab 12 Uhr"

если сегодня ПТ между 16:01 и 23:59 тогда вместо "Tag" стоит "дата след. свободный рабочий день" и время "ab 12 Uhr"

если сегодня СБ или ВК тогда вместо "Tag" стоит "дата след. свободный рабочий день" и время "ab 12 Uhr"
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРОВЕРЬТЕ КОД !!! daramylove (X)HTML/CSS 1 12.08.2018 04:52
как получить исходный код страницы после ajax lerneree AJAX и COMET 4 28.05.2018 13:53
Как найти и заменить код скрипта на странице на другой код? smls Общие вопросы Javascript 2 18.07.2016 22:01
"Оживите" код с хабра - https://habrahabr.ru/sandbox/51453/ Daniil2206 Node.JS 0 11.05.2016 18:09
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50