Подтвердить что ты не робот

Самое близкое воскресенье до данной даты с JavaScript

Мне нужно знать дату последнего воскресенья за указанную дату в php и javascript

Пусть у вас есть функция give_me_last_Sunday

give_me_last_Sunday('20110517') is 20110515
give_me_last_Sunday('20110604') is 20110529

Полная резервная копия выполняется по воскресеньям = еженедельно. Если я хочу восстановить ежедневную резервную копию, мне нужно полное (еженедельное) и ежедневное резервное копирование. Мне нужно скопировать файлы резервных копий перед восстановлением в каталог temp, чтобы восстановить ежедневную резервную копию. Мне нужно знать, какой еженедельный файл резервной копии мне нужно скопировать по ежедневному файлу.

Моя мысль заключалась в том, чтобы получить представление Джулиана (или что-то подобное) для данной даты, а затем вычесть 1 и проверить, является ли это воскресенье... Не уверен, что это лучшая идея и как конвертировать данную дату во что-то, что я могу вычитать.

4b9b3361

Ответ 1

Основываясь на усилиях Томаса и при условии, что входная строка соответствует указанному вами формату, выполните следующие действия:

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

Изменить

Если бы я написал это сейчас, я бы не стал зависеть от объекта 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;
}

В то время как формат yyyy/mm/dd корректно обрабатывается всеми браузерами, которые я тестировал, я считаю, что он более устойчив к основным методам. Особенно, когда они, вероятно, более эффективны.

Ответ 2

Хорошо, так что это только для JavaScript. У вас есть вход, который нужно извлечь из месяца, даты и года. Ниже приводится лишь частично ответ на вопрос о том, как получить дату:

<script type="text/javascript">
var myDate=new Date();
myDate.setFullYear(2011,4,16)

var a = myDate.getDate();
var t = myDate.getDay();
var r = a - t;
document.write("The date last Sunday was "  + r);

</script>

Таким образом, функция setFullYear устанавливает myDate в указанную дату, где первые четыре цифры - это год, следующий - месяц (0 = январь, 1 = фев.,...). Последний - фактическая дата. Затем приведенный выше код дает вам дату воскресенья до этого. Я предполагаю, что вы можете добавить больше кода для получения месяца (используйте метод getMonth()). Вот несколько ссылок, которые могут быть полезны

(Возможно, вы найдете другие функции, которые вам нужны)

Надеюсь, это немного поможет, хотя это не полный ответ.

Ответ 4

окончательный код (большое спасибо @Thomas и @Rob)

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());

  year = d.getFullYear()+'';
  month = d.getMonth()+1+'';
  day = d.getDate()+'';
  if ( month.length == 1 ) month = "0" + month; // Add leading zeros to month and date if required
  if ( day.length == 1 ) day = "0" + day;  

  return year+month+day;
}