我正在尝试显示当月最后一个星期三的日期...以便它会自动更改为下个月发生时的正确日期。 (因此,不必说:“每个月的最后一个星期三”,我可以动态地给出实际日期。)
例如,我希望这个日期在本月的9月25日星期三显示在网页上,然后显示为下个月10月30日星期三。
额外的额外解决方案是,如果我可以在上一个日期过去后显示下个月的日期。在上面的例子中,当前日期是9月26日至30日(上一个星期三之后的任何日期,但仍然在同一个月)..日期将显示10月30日的下一个表现日期。
如果解决方案是通过html,javascript / jquery或asp。
,那将是很棒的谢谢, SunnyOz
答案 0 :(得分:1)
这取决于您的“简单”标准。这是一个简单的功能,可以根据需要执行,它是5行工作代码,可以减少到4,但如果完成则会失去一点清晰度:
function lastDayInMonth(dayName, month, year) {
// Day index map - modify to suit whatever you want to pass to the function
var dayNums = {Sunday: 0, Monday:1, Tuesday:2, Wednesday:3,
Thursday:4, Friday:5, Saturday:6};
// Create a date object for last day of month
var d = new Date(year, month, 0);
// Get day index, make Sunday 7 (could be combined with following line)
var day = d.getDay() || 7;
// Adjust to required day
d.setDate(d.getDate() - (7 - dayNums[dayName] + day) % 7);
return d;
}
您可以将地图更改为任何内容,只需确定要传递给可以映射到ECMAScript日期编号的函数(日期名称,缩写,索引等)。
所以,如果总是希望显示本月的最后一个星期三或下个月,如果它已通过:
function showLastWed() {
var now = new Date();
var lastWedOfThisMonth = lastDayInMonth('Wednesday', now.getMonth()+1, now.getFullYear());
if (now.getDate() > lastWedOfThisMonth().getDate()) {
return lastDayInMonth('Wednesday', now.getMonth()+2, now.getFullYear());
} else {
return lastWedOfThisMonth;
}
}
请注意,函数需要日历月号(Jan = 1,Feb = 2等),而 getMonth 方法返回ECMAScript月份索引(Jan = 0,Feb = 1等) 。)因此+1
和+2
获取日历月号。
答案 1 :(得分:0)
您可以使用javascript库,例如moment.js: http://momentjs.com/
然后得到它:
moment().add('months', 1).date(1).subtract('days', 1).day(-4)
答案 2 :(得分:0)
我更喜欢像@Aralo建议的那样使用像moment.js
这样的抽象。但是,要在原始JavaScript中执行此操作,您可以使用这样的代码...创建一个可以在一个月内获取所有日期的函数。然后反向遍历列表以查找最后一天的数字。星期三是3
。
function getDaysInMonth(date) {
var dayCursor = new Date(today.getFullYear(), today.getMonth()); // first day of month
var daysInMonth = [];
while(dayCursor.getMonth() == date.getMonth()) {
daysInMonth.push(new Date(dayCursor));
dayCursor.setDate(dayCursor.getDate() + 1);
}
return daysInMonth;
}
function findLastDay(date, dayNumber) {
var daysInMonth = getDaysInMonth(date);
for(var i = daysInMonth.length - 1; i >= 0; i--) {
var day = daysInMonth[i];
if(day.getDay() === dayNumber) return day;
}
}
然后,要获得当月的最后一个星期三:
var today = new Date();
var lastWednesday = findLastDay(today, 3);
答案 3 :(得分:0)
以下是JS中的一种方法:
var monthLengths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
function getLastWednesday() {
var d = new Date();
var month = d.getMonth();
var lastDay = monthLengths[month];
// mind leap years
if (month == 1) {
var year = d.getFullYear();
var isLeapYear = ((year % 4 == 0 && year % 100 > 0) || year % 400 == 0);
if (isLeapYear) lastDay++;
}
// get the weekday of last day in the curent mont
d.setDate(lastDay);
var weekday = d.getDay();
// calculate return value (wednesday is day 3)
if (weekday == 3) {
return lastDay;
}
else {
var offset = weekday - 3;
if (offset < 0) offset += 7;
return lastDay - offset;
}
}