每年倒计时一天(并查找当年的当天日期)

时间:2017-09-06 10:45:59

标签: javascript jquery datetime momentjs countdowntimer

我希望做一些相当复杂的事情,我一直在使用moment.js或countdown.js试图解决这个问题,但我认为我的要求太复杂了?我可能错了。这是标准......

我需要能够在不必每年手动更改日期的情况下实现以下目标,只需添加一次并在一个页面上进行多次倒计时。

  
      
  1. 查找当前日期
  2.   
  3. 查找当前年度
  4.   
  5. 查找当月
  6.   
  7. 查找适用的月份内的某一天    ¬第3个星期天或第2个星期六
  8.   
  9. 转换为JS并输出为html并运行倒计时
  10.   
  11. 过去日期 - 重置下一年
  12.   

非常精神。例如,如果一个事件总是在3月的第3个星期日。每年的日期不一样。

  
      
  1. 2016年 - 3月19日星期日
  2.   
  3. 2017年 - 3月20日星期日
  4.   
  5. 2018年 - 3月18日星期日等。
  6.   

我希望这个解释得很好,但我意识到这可能是一团糟。我设法让它每年重新设置,手动添加日期,但是有人投入了 date 的扳手,每年都有所不同。

var event = new Date();
event = new Date(event.getFullYear() + 1, 3 - 1, 19);
jQuery('#dateEvent').countdown({ until: event });


<div id="dateEvent"></div>

2 个答案:

答案 0 :(得分:1)

我编辑了这个答案,因为我现在已经整理了一个适合我的解决方案。我认为这不是简单的编码,因为它实际上没有得到回答。请这是基本的编码。拿起一本javascript书并学习编码&#39;,谢谢...

// get the specific day of the week in the month in the year
        function getDay(month) {
            // Convert date to moment (month 0-11)
            var myMonth = moment("April", "MMMM");
            // Get first Sunday of the first week of the month
            var getDay = myMonth.weekday(0); // sunday is 0
            var nWeeks = 3; // 0 is 1st week
            // Check if first Sunday is in the given month
            if (getDay.month() != month) {
                nWeeks++;
            }
            // Return 3rd Sunday of the month formatted (custom format)
            return getDay.add(nWeeks, 'weeks').format("Y-MM-D h:mm:ss");
        }

        // print out the date as HTML and wrap in span
        document.getElementById("day").innerHTML = '<span>' + getDay() + '</span>';

使用

<script src="moment.js"></script>

希望它可以帮助某人 - 当我知道在检查了当前日期和事件过去后的1年后,我会更新。我会查看那本JS书。

答案 1 :(得分:0)

请看下面的代码,我在评论中解释了什么。

您可以通过提供任何希望开始日期的javascript日期对象来使用它,然后将您希望知道日期的相应年份添加为第二个值。

var date = new Date("2016-03-20");

function getDayInYear(startDate, year) {
    // get a moment instance of the start date
    var start = moment(startDate);
    // collect the moment.js values for the day and month
    var day = start.day();
    var month = start.month();
    // calculate which week in the month the date is. 
    var nthWeekOfMoth = Math.ceil(start.date() / 7);
    // Build up the new moment with a date object, passing the requested year, month and week in it
    var newMoment = moment(new Date(year,month,(nthWeekOfMoth * 7)));
    // Return the next instance of the requested day from the current newMoment date value.
    return newMoment.day(day);
}

var oldMoment = moment(date);
var newMoment2017 = getDayInYear(date,2017);
var newMoment2018 = getDayInYear(date,2018);

console.log(oldMoment.format('YYYY MMMM dddd DD'));
console.log(newMoment2017.format('YYYY MMMM dddd DD'));
console.log(newMoment2018.format('YYYY MMMM dddd DD'));

/** working from today up to 10 years into the future **/

var date = new Date();
var year = date.getFullYear();
for(var i = 0; i < 11; i++) {
    console.log(getDayInYear(date, year+i).format('YYYY MMMM dddd DD'));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>