我正在尝试编辑一些基本上显示明天日期的 JavaScript 代码。但是对于周五和周末(周五、周六和周日),它应该显示下周一的日期。
这是我的代码:
var date = new Date(); // timezone
date.setDate(date.getDate() + 1); // move to tomorrow
date.setUTCHours(11,0,0,0); // set time using UTC(GMT) timezone
document.getElementById("next-shipment").textContent = date.toLocaleString();
例如,假设今天是 2015 年 11 月 4 日,星期二。javascript 代码应以这种格式显示“2015 年 11 月 5 日”--->。 在周五、周六和周日,代码应显示:下周一的日期:2015 年 11 月 9 日
该代码应全年有效。
最佳答案
试试这个:
var today = new Date(); // timezone
document.getElementById("result").innerHTML = "<br/>Today's next day is: " + FormatDate(GetNextDay(today));
function GetNextDay(date){
date.setDate(date.getDate() + 1); // move to next day.
switch(date.getDay()) {
case 0: //Sunday
case 6: //Saturday
date = GetNextDay(date);
}
return date;
}
function FormatDate(date){
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
return months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
}
function TestDate(){
var date = new Date(document.getElementById("TestDate").value);
document.getElementById("result").innerHTML += "<br/>Selected day's next day is: " + FormatDate(GetNextDay(date));
}
<input type="text" id="TestDate" value="November 06, 2015" />
<input type="button" value="Get Next Day" onclick="TestDate();" />
<div id="result"></div>
这个想法相当简单:
前两行和末尾的 TestDate()
函数仅用于测试,您的代码中不需要它们。
该工作主要由 GetNextDay()
函数完成。你给它一个日期,它会计算并返回下一个日期(跳过周末)。它分两步完成:
1- 首先它向给定日期添加一天 date.setDate(date.getDate() + 1);
。
2- 它检查新日期 date.getDay()
的日期。如果它是 6 或 0(星期六或星期日),它会再次调用自己 date = GetNextDay(date);
这意味着它会在日期上再增加一天。这种函数调用自身的概念在编程中被称为“递归”。当它到达星期一时,它将停止调用自身并返回日期。
正确计算下一天的唯一方法是在日期上加一天。这利用了知道如何进行计算的 JavaScript 的 Date 库。例如,它知道在“11 月 30 日”上加一天是“12 月 1 日”,而不是“11 月 31 日”。如果我们尝试通过将一天的数字加 1 来手动执行此操作:30 + 1 = 31,但“11 月 31 日”不是有效日期。为了解决这个问题,我们需要编写一个类似于 JavaScript 的库。显然,这就像重新发明轮子,没有任何意义。
关于javascript - 编辑 JavaScript(明天的日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534441/