使用JavaScript在给定日期之前最接近的星期日

Rad*_*dek 12 javascript datetime

我需要知道phpjavascript中给定日期的最后一个星期日的日期

我们有一个函数give_me_last_Sunday

give_me_last_Sunday('20110517') is 20110515
give_me_last_Sunday('20110604') is 20110529
Run Code Online (Sandbox Code Playgroud)

完整备份在星期日=每周完成.如果我想恢复每日备份,我需要完整(每周)和每日备份.我需要在恢复到临时目录之前复制备份文件,这样我恢复每日备份我需要知道我需要在每日文件中复制哪些每周备份文件.

我的想法是在给定日期获得Julian表示(或类似的东西),然后减去1并检查它是否是星期日...不确定这是否是最好的想法以及如何将给定日期转换为我可以减去的东西.

Rob*_*obG 13

根据Thomas的努力,并提供输入字符串正是您指定的格式,然后:

function lastSunday(d) {
  var d = d.replace(/(^\d{4})(\d{2})(\d{2}$)/,'$1/$2/$3');
  d = new Date(d);
  d.setDate(d.getDate() - d.getDay());
  return d;
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果我现在写这个,我不依赖于解析字符串的Date对象,而是自己做:

function lastSunday(s) {
  var d = new Date(s.substring(0,4), s.substring(4,6) - 1, s.substring(6));
  d.setDate(d.getDate() - d.getDay());
  return d;
}
Run Code Online (Sandbox Code Playgroud)

虽然我测试过的所有浏览器都正确解析了yyyy/mm/dd格式,但我认为坚持基本方法会更加健壮.特别是当它们可能更有效时.

  • 第一部分使用正则表达式将20110504转换为2011/05/04,这是一种ISO8601格式,javascript Date对象默认可以解析.使用`new Date()`将该字符串转换为日期对象.*setDate(int)*设置日期对象的日期,*int*可以是负数,以便在当前月份之前设置日期.*getDate()*返回当前日期,*getDay()*返回当周的当天数,周日为零.因此,从日期中减去日期数总是给星期日.如果日期变为负数,则Date对象会将其调整为上个月. (4认同)