我试图创建一个函数,它返回特定工作日的日期,即上次发生的日期。
例如,今天是2016-08-16星期二。如果我正在寻找上周五,它应该返回2016-08-12。
目前,我使用的代码是针对特定的工作日编写的。我怎么能改变它以使它返回我要求的任何工作日的日期?
let t = new Date().getDate() + (6 - new Date().getDay() - 1) - 7;
let d = new Date();
d.setDate(t);
答案 0 :(得分:3)
var WEEK_DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var MILLIS_PER_DAY = 86400000;
function lastOccurrenceOf(weekDay) {
var desiredIndex = WEEK_DAYS.indexOf(weekDay);
var currentDate = new Date;
var daysDifference = (currentDate.getDay() - desiredIndex + 6) % 7 + 1; //the number of days ago
return new Date(currentDate.getTime() - MILLIS_PER_DAY * daysDifference);
}
console.log(lastOccurrenceOf('Tuesday').toString());
console.log(lastOccurrenceOf('Friday').toString());

答案 1 :(得分:0)
似乎有一种方法可以更容易地做到这一点,但这是我的看法。
console.log("Monday", getLast("Monday"));
console.log("Tuesday", getLast("Tuesday"));
console.log("Friday", getLast("Friday"));
function getLast(dayName) {
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var dayNum = days.indexOf(dayName);
var todayDate = new Date();
var todayDay = todayDate.getDay();
if (dayNum >= todayDay) todayDay += 7;
var diff = todayDay - dayNum;
diff = diff * 24 * 60 * 60 * 1000;
return new Date(todayDate - diff);
}
答案 2 :(得分:0)
这是我编写的适用于所有情况的函数。
class App extends Component {
renderItemForFirstList = ({item, index}) => {
<FlatList
data={item}
renderItem={this.renderItemForSecondList}
/>
}
render() {
return (
<View>
<FlatList
data={this.state.categoryData}
renderItem={this.renderItemForFirstList}
/>
</View>
);
}
}
以您的示例为例,如果今天是2016年8月16日(星期二),则可以找到以下上一个星期五:
/**
* @param {Date} date - the initial Date
* @param {('Mon'|'Tue'|'Wed'|'Thurs'|'Fri'|'Sat'|'Sun')} day - the day of week
* @returns {Date} - the Date of last occurrence or same Date if day param is invalid
*/
function getLastDayOccurence (date, day) {
const d = new Date(date.getTime());
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thurs', 'Fri', 'Sat'];
if (days.includes(day)) {
const modifier = (d.getDay() + days.length - days.indexOf(day)) % 7 || 7;
d.setDate(d.getDate() - modifier);
}
return d;
}