这个论坛的新手。我已经为此绞尽脑汁有一段时间了,但就是无法让它按我想要的方式工作。
基本上,我创建了一个倒计时器,我想每天下午 2 点重置它,并发送如下消息:“使用‘倒计时’计时器订购,在‘日期’前收到”
因此,它的失败之处在于,我似乎无法让它跳过周末或英国银行假期,并且随着下周一的英国银行假期,如果我能够对其进行全面测试并正常工作,那就太好了。
因此,如果有人今天订购并在明天(5 月 2 日星期四)下午 2 点之前订购,他们将在 2024 年 5 月 3 日星期五收到商品。这一切正常!
但是,当时间为英国 5 月 3 日星期五下午 2 点格林威治标准时间时,它应该显示“receive by Tuesday 7th May 2024”。如果本周末不是英国银行假日,则应显示“receive by Monday 6th May”。
周末,最好倒计时到本周六下午 2 点,并告诉客户“5 月 7 日星期二之前收到”。周日、5 日和周一 6 日也是如此,前提是他们在下午 2 点之前订购!
在没有银行假日的任何其他周末,它应该告诉客户:-
等等。
任何指针或超级天才都可以帮助我调整代码,因为我似乎已经尝试了一切。
我不会说我认为这是不可能的,因为我相信没有什么是不可能的。这超出了我的技能范围!!!
< script >
// UK Bank Holidays between now and 2027
var bankHolidays = ["2024-05-06", "2024-05-27", "2024-08-26", "2024-12-25", "2024-12-26", "2025-01-01", "2025-04-18", "2025-04-21", "2025-05-05", "2025-05-26", "2025-08-25", "2025-12-25", "2025-12-26", "2026-01-01", "2026-04-03", "2026-04-06", "2026-05-04", "2026-05-25", "2026-08-31", "2026-12-25", "2026-12-28"];
// Get today's date and time
var now = new Date();
// Set the countdown date and time to 2 PM today
var countDownDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 14, 0, 0, 0);
// If it's past 2 PM, set the countdown date and time to 2 PM tomorrow
if (now > countDownDate) {
countDownDate.setDate(countDownDate.getDate() + 1);
}
// Calculate the delivery day
var deliveryDay = new Date(countDownDate);
// If the order is placed up until 2 PM on Wednesday, the delivery day is Friday
// If the order is placed after 2 PM on Wednesday, the delivery day is Monday
if (deliveryDay.getDay() <= 4) {
deliveryDay.setDate(deliveryDay.getDate() + (5 - deliveryDay.getDay()));
} else {
deliveryDay.setDate(deliveryDay.getDate() + ((8 - deliveryDay.getDay()) % 7));
}
// If the delivery day is a bank holiday, postpone it to the next day
while (bankHolidays.includes(deliveryDay.toISOString().split('T')[0])) {
deliveryDay.setDate(deliveryDay.getDate() + 1);
}
// Update the delivery day element
document.getElementById("deliveryDay").innerHTML = deliveryDay.toDateString();
// Update the countdown timer every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the countdown date
var distance = countDownDate - now;
// Time calculations for hours, minutes and seconds
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in the timer element
document.getElementById("timer").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";
// If the countdown is over, reset the countdown date and time to 2 PM tomorrow and recalculate the delivery day
if (distance < 0) {
countDownDate.setDate(countDownDate.getDate() + 1);
if (countDownDate.getDay() <= 3) {
deliveryDay.setDate(deliveryDay.getDate() + (5 - deliveryDay.getDay()));
} else {
deliveryDay.setDate(deliveryDay.getDate() + ((8 - deliveryDay.getDay()) % 7));
}
while (bankHolidays.includes(deliveryDay.toISOString().split('T')[0])) {
deliveryDay.setDate(deliveryDay.getDate() + 1);
}
document.getElementById("deliveryDay").innerHTML = deliveryDay.toDateString();
}
}, 1000); <
/script>
<div>
<h3>Order within <span class="countdown" id="timer"></span> to receive *<span class="deliverydate" id="deliveryDay"></span></h3>
</div>
<div>
<h4>*Exclusions apply. Click <a href="/despatch-delivery-information" id="deliverydaysmall">HERE</a> for full details or if your item is time critical.</h4>
</div>
<script src="https://bp215.bluepark.build/user/countdowntest.js"
你可以尝试这个代码吗我希望它能解决你的问题
// UK Bank Holidays between now and 2027
var bankHolidays = ["2024-05-06", "2024-05-27", "2024-08-26", "2024-12-25", "2024-12-26", "2025-01-01", "2025-04-18", "2025-04-21", "2025-05-05", "2025-05-26", "2025-08-25", "2025-12-25", "2025-12-26", "2026-01-01", "2026-04-03", "2026-04-06", "2026-05-04", "2026-05-25", "2026-08-31", "2026-12-25", "2026-12-28"];
// Get today's date and time
var now = new Date();
// Set the countdown date and time to 2 PM today
var countDownDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 14, 0, 0, 0);
// If it's past 2 PM, set the countdown date and time to 2 PM tomorrow
if (now > countDownDate) {
countDownDate.setDate(countDownDate.getDate() + 1);
}
// Calculate the delivery day
var deliveryDay = new Date(countDownDate);
// Function to check if a date is a weekend
function isWeekend(date) {
var day = date.getDay();
return day === 0 || day === 6;
}
// Function to check if a date is a UK Bank Holiday
function isBankHoliday(date) {
var isoDate = date.toISOString().split('T')[0];
return bankHolidays.includes(isoDate);
}
// Adjust delivery day for weekends and bank holidays
while (isWeekend(deliveryDay) || isBankHoliday(deliveryDay)) {
deliveryDay.setDate(deliveryDay.getDate() + 1);
}
// Update the delivery day element
document.getElementById("deliveryDay").innerHTML = deliveryDay.toDateString();
// Update the countdown timer every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the countdown date
var distance = countDownDate - now;
// Time calculations for hours, minutes and seconds
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in the timer element
document.getElementById("timer").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";
// If the countdown is over, reset the countdown date and time to 2 PM tomorrow and recalculate the delivery day
if (distance < 0) {
countDownDate.setDate(countDownDate.getDate() + 1);
// Reset delivery day and adjust for weekends and bank holidays
deliveryDay = new Date(countDownDate);
while (isWeekend(deliveryDay) || isBankHoliday(deliveryDay)) {
deliveryDay.setDate(deliveryDay.getDate() + 1);
}
// Update delivery day element
document.getElementById("deliveryDay").innerHTML = deliveryDay.toDateString();
}
}, 1000);