动态获取特定工作日的最后一次出现日期

时间:2016-08-16 22:03:54

标签: javascript date

我试图创建一个函数,它返回特定工作日的日期,即上次发生的日期。

例如,今天是2016-08-16星期二。如果我正在寻找上周五,它应该返回2016-08-12。

目前,我使用的代码是针对特定的工作日编写的。我怎么能改变它以使它返回我要求的任何工作日的日期?

let t = new Date().getDate() + (6 - new Date().getDay() - 1) - 7;
let d = new Date();
d.setDate(t);

3 个答案:

答案 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;
}

也在这里回答:https://stackoverflow.com/a/59144918/5436697