【问题标题】:Getting last Saturday from a given date using jQuery or JS使用 jQuery 或 JS 从给定日期获取上周六
【发布时间】:2019-09-12 15:51:16
【问题描述】:

我正在尝试获取给定日期的最后一个星期六。如果函数参数是9/12/2019,它应该返回9/7/2019

我尝试了以下两种方法都没有成功:

function getLastSaturday(theDate) {
  debugger
  var dateToUse = new Date(theDate);
  var lastSaturday = new Date(new Date().setDate(dateToUse.getDate() - (dateToUse.getDay() == 0 ? 7 : dateToUse.getDay() + 1)));
  return lastSaturday;
}

function getLatestSaturday(theDate) {
  var dateToUse = new Date(theDate);
  var latestSaturday = new Date(new Date().setDate(dateToUse.getDate() - dateToUse.getDay() + 1));
  return latestSaturday;
}

console.log(getLastSaturday('9/12/2019'));
console.log(getLatestSaturday('9/12/2019'));

console.log(getLastSaturday('8/5/2019'));

更新

修改后的 getLastSaturday(theDate) 有效

function getLastSaturday(theDate) {
    var dateToUse = new Date(theDate);
    var start = dateToUse.getDay() == 0 ? 7 : dateToUse.getDay();
    var target = 6; // Saturday

    if (target >= start)
        target -= 7;
    var lastSaturday = dateToUse.addDays(target - start);
    return lastSaturday;
}

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

【问题讨论】:

  • 您的第一个示例运行良好。
  • 当我测试它时,我选择 8/5/2019 并返回 9/3/2019。我从 Ajax 调用中获得并传递给此函数的日期是 Mon Aug 05 2019 00:00:00 GMT-0400 (Eastern Daylight Time) 的形式,即参数 theDate
  • 你看过这篇文章吗? stackoverflow.com/questions/3638906/… 修改其中一个答案以满足您的需求并不难。
  • 感谢@user7290573,我能够使用 DateJS 库来解决这个问题。让它变得非常简单,我所要做的就是获取从 Ajax 调用 (dtWeekStart) 返回的日期并使用 dtStart = dtWeekStart.last().saturday();。如果您在回复中发表评论,我会将其标记为答案。
  • 我还更新了我的第一个 JS 函数以返回相同的结果,尽管 DateJS 更容易。

标签: javascript jquery date


【解决方案1】:

考虑这条线:

var lastSaturday = new Date(new Date().setDate(dateToUse.getDate() - (dateToUse.getDay() == 0 ? 7 : dateToUse.getDay() + 1)));

这将获取当前日期,然后减去某个其他日期的天数。您需要做的就是减去日期的天数 + 1,例如

function getLastSaturday(date) {
  // Copy date so don't modify original
  let d = new Date(date);
  // Adjust to previous Saturday
  d.setDate(d.getDate() - (d.getDay() + 1));
  return d;
}

// Samples
[new Date(2019,8,23),
 new Date(2019,8, 1),
 new Date(2019,8, 7),
 new Date(2019,8,12)
].forEach(d => console.log(d.toString()
  + ' => ' +  getLastSaturday(d).toString()
));

另见get previous saturday's date and next friday's

强烈建议不要对不支持的字符串格式使用内置解析器,请参阅Why does Date.parse give incorrect results?

日期格式“2019 年 9 月 7 日”不明确,它对大多数人来说代表 7 月 9 日,对某些人来说代表 9 月 7 日。避免混淆的最简单方法是使用月份名称而不是数字。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多