我有一个JS脚本,可获取即将到来的星期二和星期四的日期,但今天注意到星期四的日期已经过去了。我认为这与6月底接近有关,但不确定如何解决。有任何想法吗?
当前结果:
6月30日,星期二
3月10日,星期四
预期结果:
6月30日,星期二
7月2日,星期四
https://jsfiddle.net/oneelement/pf8gon8w/
var today = new Date();
var dayOfWeek = today.getDay();
var month = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'];
function getNextDate(d) {
var date = today.getDate();
while (today.getDay() !== d) {
today.setDate(++date);
}
return today;
}
var getOrdinal = function (n) {
var s = ["th", "st", "nd", "rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
}; // credit: http://forums.shopify.com/categories/2/posts/29259
var tueDate = getNextDate(2);
tueDate = 'Tuesday, ' + month[tueDate.getMonth()] + ' ' + getOrdinal(tueDate.getDate());
var thuDate = getNextDate(4);
thuDate = 'Thursday, ' + month[thuDate.getMonth()] + ' ' + getOrdinal(thuDate.getDate());
if (dayOfWeek < 3 || dayOfWeek > 4) {
$('#event1').html(tueDate);
$('#event2').html(thuDate);
} else {
$('#event1').html(thuDate);
$('#event2').html(tueDate);
}
最佳答案
今天,var date = today.getDate();
返回30。执行today.setDate(++date);
会将日期设置为31,日期对象正确地将其解释为7月1日。
但是,现在在下一次迭代中,您将增加原始日期,即32。将7月1日设置为32会导致“ 7月32日”,即8月1日。接下来,将其设置为9月2日的“ 8月33日”,依此类推。它一直持续到碰巧在明年3月10日星期四降落。
您需要做的是在循环中每次刷新一天,以便当月份改变时它可以正确地恢复为1。
var date;
while (today.getDay() !== d) {
date = today.getDate();
today.setDate(++date);
}
var today = new Date();
var dayOfWeek = today.getDay();
var month = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'];
function getNextDate(d) {
var date;
while (today.getDay() !== d) {
date = today.getDate();
today.setDate(++date);
}
var getOrdinal = function (d) {
var s = ["th", "st", "nd", "rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
};
return today;
}
var getOrdinal = function (n) {
var s = ["th", "st", "nd", "rd"],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
}; // credit: http://forums.shopify.com/categories/2/posts/29259
var tueDate = getNextDate(2);
tueDate = 'Tuesday, ' + month[tueDate.getMonth()] + ' ' + getOrdinal(tueDate.getDate());
var thuDate = getNextDate(4);
thuDate = 'Thursday, ' + month[thuDate.getMonth()] + ' ' + getOrdinal(thuDate.getDate());
if (dayOfWeek < 3 || dayOfWeek > 4) {
$('#event1').html(tueDate);
$('#event2').html(thuDate);
} else {
$('#event1').html(thuDate);
$('#event2').html(tueDate);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="event1">event 1</p>
<p id="event2">event 2</p>