ближайшее воскресенье до указанной даты с JavaScript

Мне нужно знать дату последнего воскресенья для данной даты в php & в JavaScript

давайте иметь функцию give_me_last_Sunday

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

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

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

4 ответов


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

function lastSunday(d) {
  var d = d.replace(/(^\d{4})(\d{2})(\d{2}$)/,'//');
  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 правильно анализируется всеми браузерами, которые я тестировал, я думаю, что более надежно придерживаться основных методов. Особенно когда они более эффективны.


Ok, так что это только для 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= Jan, 1= Feb.,...). Последнее-настоящее свидание. Тогда приведенный выше код дает вам дату воскресенья до этого. Я предполагаю, что вы можете добавьте больше кода, чтобы получить месяц (используйте метод getMonth ()). Вот несколько ссылок, которые могут быть полезны

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

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


Yup и strtotime были портированы в JS, например http://phpjs.org/functions/strtotime:554 здесь.


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

function lastSunday(d) {
  var d = d.replace(/(^\d{4})(\d{2})(\d{2}$)/,'//');

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