Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   проверьте код (https://javascript.ru/forum/xhtml-html-css/85387-proverte-kod.html)

Uhu 26.07.2023 12:52

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

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

сразу скажу с кодом я даже не на ВЫ. Этот код мне сделал чатжопати и все вроде бы работает кроме скрипта с выходными. Если сегодня (после 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>

рони 26.07.2023 14:19

Uhu,
var следующий_рабочий_день
if(если текущая выходной или праздник или время после 16) следующий_рабочий_день с 12
else сегодня с 12
alles

Uhu 26.07.2023 15:50

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

условия такие:
-если сегодня Мо-Пт между 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

рони 26.07.2023 17:17

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

Uhu 26.07.2023 18:14

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

рони 26.07.2023 18:19

время когда можно забрать товар
 
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>

Uhu 27.07.2023 13:46

переиграли все на яве, но что то неработаю праздники....
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());

рони 27.07.2023 14:25

Цитата:

Сообщение от Uhu
но что то неработаю праздники....

так на праздники и выходные надо в первую очередь проверять, а у вас
Цитата:

Сообщение от Uhu
if (day >= 1 && day <= 5) {

похоже вы не читали
Цитата:

Сообщение от рони
if(если текущая выходной или праздник или время после 16)

чем не устраивает код в #6 ?

Uhu 27.07.2023 14:42

Цитата:

так на праздники и выходные надо в первую очередь проверять, а у вас
видимо правду говорят что чатжопати потупел, я ему прописавал конкретно дни с ПН-ЧТ, ПТ и СБ+ВК...
например если сегодня ПН-ПТ между 00:01 и 9:59 а звтра нет отпуска то.... видимо ему не посилам :(
Цитата:

чем не устраивает код в #6 ?
он почему тоже неучитавает отпуск, там стоит сегодня отпуск а он пишет мож приходи забирай

Uhu 27.07.2023 14:59

мы немного изменили условия:
если сегодня ПН-ПТ между 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"


Часовой пояс GMT +3, время: 06:24.