我希望做一些相当复杂的事情,我一直在使用moment.js或countdown.js试图解决这个问题,但我认为我的要求太复杂了?我可能错了。这是标准......
我需要能够在不必每年手动更改日期的情况下实现以下目标,只需添加一次并在一个页面上进行多次倒计时。
- 查找当前日期
- 查找当前年度
- 查找当月
- 查找适用的月份内的某一天 ¬第3个星期天或第2个星期六
- 转换为JS并输出为html并运行倒计时
- 过去日期 - 重置下一年
醇>
非常精神。例如,如果一个事件总是在3月的第3个星期日。每年的日期不一样。
- 2016年 - 3月19日星期日
- 2017年 - 3月20日星期日
- 2018年 - 3月18日星期日等。
醇>
我希望这个解释得很好,但我意识到这可能是一团糟。我设法让它每年重新设置,手动添加日期,但是有人投入了 date 的扳手,每年都有所不同。
var event = new Date();
event = new Date(event.getFullYear() + 1, 3 - 1, 19);
jQuery('#dateEvent').countdown({ until: event });
<div id="dateEvent"></div>
答案 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>