ближайшее воскресенье до указанной даты с JavaScript - PullRequest
12 голосов
/ 17 мая 2011

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

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

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

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

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

Ответы [ 4 ]

13 голосов
/ 17 мая 2011

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

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 правильно анализируется всеми протестированными браузерами, я считаю, что придерживаться основных методов более надежно Особенно, когда они, вероятно, более эффективны.

4 голосов
/ 17 мая 2011

Хорошо, так что это только для 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 ()). Вот несколько ссылок, которые могут быть полезны

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

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

1 голос
/ 17 мая 2011

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

0 голосов
/ 17 мая 2011

финальный код (большое спасибо @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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...