我有一个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>

07-24 18:55
查看更多