26.07.2023, 12:52
|
Новичок на форуме
|
|
Регистрация: 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>
|
|
26.07.2023, 14:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Uhu,
var следующий_рабочий_день
if(если текущая выходной или праздник или время после 16) следующий_рабочий_день с 12
else сегодня с 12
alles
|
|
26.07.2023, 15:50
|
Новичок на форуме
|
|
Регистрация: 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
|
|
26.07.2023, 17:17
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Uhu,
условия некорректные завтрашнего утра и следующего понедельника, может не быть, если на этот день будет праздник.
|
|
26.07.2023, 18:14
|
Новичок на форуме
|
|
Регистрация: 26.07.2023
Сообщений: 6
|
|
одно условие не может "перекрыть" другое? хммм.. надо подумать как решить
Последний раз редактировалось Uhu, 26.07.2023 в 18:16.
|
|
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>
|
|
27.07.2023, 13:46
|
Новичок на форуме
|
|
Регистрация: 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());
|
|
27.07.2023, 14:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от Uhu
|
но что то неработаю праздники....
|
так на праздники и выходные надо в первую очередь проверять, а у вас
Сообщение от Uhu
|
if (day >= 1 && day <= 5) {
|
похоже вы не читали
Сообщение от рони
|
if(если текущая выходной или праздник или время после 16)
|
чем не устраивает код в #6 ?
|
|
27.07.2023, 14:42
|
Новичок на форуме
|
|
Регистрация: 26.07.2023
Сообщений: 6
|
|
Цитата:
|
так на праздники и выходные надо в первую очередь проверять, а у вас
|
видимо правду говорят что чатжопати потупел, я ему прописавал конкретно дни с ПН-ЧТ, ПТ и СБ+ВК...
например если сегодня ПН-ПТ между 00:01 и 9:59 а звтра нет отпуска то.... видимо ему не посилам
Цитата:
|
чем не устраивает код в #6 ?
|
он почему тоже неучитавает отпуск, там стоит сегодня отпуск а он пишет мож приходи забирай
|
|
27.07.2023, 14:59
|
Новичок на форуме
|
|
Регистрация: 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"
|
|
|
|