我正在尝试编辑一些基本上显示明天日期的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日
代码应该全年都可以使用。
答案 0 :(得分:2)
试试这个:
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));
}
&#13;
<input type="text" id="TestDate" value="November 06, 2015" />
<input type="button" value="Get Next Day" onclick="TestDate();" />
<div id="result"></div>
&#13;
这个想法很简单:
前两行和最后的TestDate()
功能仅用于测试,您在代码中不需要它们。
这项工作主要由GetNextDay()
功能完成。你给它一个日期,它计算并返回下一个日期(跳过周末)。它分两步完成:
1-首先,它会在给定日期date.setDate(date.getDate() + 1);
添加一天。
2-它检查新日期date.getDay()
的日期。如果它是6或0(星期六或星期日),它再次调用自己date = GetNextDay(date);
,这意味着它将再添加一天。这个函数调用自身的概念被称为&#34;递归&#34;在编程中。当它到达星期一时,它将停止自行调用并返回日期。
正确计算第二天的唯一方法是在日期中添加一天。这利用了JavaScript的日期库,它知道如何进行计算。例如,它知道将一天添加到&#34; 11月30日&#34;是&#34; 12月1日&#34;,NOT&#34; 11月31日&#34;。如果我们尝试通过在当天的数字中加1来手动执行此操作:30 + 1 = 31,但是&#34; 11月31日&#34;不是有效日期。要解决这个问题,我们需要编写一个类似于JavaScript的库。显然,这就像重新发明轮子一样,没有任何意义。
答案 1 :(得分:1)
Date构造函数还有一个名为getDay()
的函数,它返回0到6之间的整数(0 =星期日,6 =星期六)。您可以使用它来检测星期五(0),星期六(6),星期日(0)并省略它们。
这是一个演示,提醒您是否是周末:
var myDate = new Date();
myDate.setFullYear(2015);
myDate.setMonth(11);
myDate.setDate(6);
if(myDate.getDate() == 5 || myDate.getDay() == 6 || myDate.getDay() == 0) alert('Weekend!');
document.write(myDate);
要查找第二天,请传递Date构造函数一次&amp;它会为你做的工作。您需要创建一个阵列,然后按照您希望的方式格式化 2015年11月5日。
<强> JS:强>
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var tomDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
var day = tomDate.getDate();
var month = monthNames[tomDate.getMonth()];
var year = tomDate.getFullYear()
var d = new Date();
var n = d.getDay();
if(n == 5){
var fromFri = n + 4;
document.write("<b>" + month + " " + fromFri + ", " + year + "</b>");
}else if (n == 6){
var fromSat = n + 3;
document.write("<b>" + month + " " + fromSat + ", " + year + "</b>");
}else if (n == 0) {
var fromSun = n + 2;
document.write("<b>" + month + " " + fromSun + ", " + year + "</b>");
}else{
document.write("<b>" + month + " " + day + ", " + year + "</b>");
}
更新:CODEPEN DEMO