ближайшее воскресенье до указанной даты с 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 ()). Вот несколько ссылок, которые могут быть полезны
- http://www.w3schools.com/js/js_obj_date.asp
- http://www.w3schools.com/jsref/jsref_setFullYear.asp
- http://www.w3schools.com/jsref/jsref_getMonth.asp
(вы, вероятно, можете найти другие функции, которые вам нужны)
Я надеюсь, что это поможет немного, хотя это не полный ответ.
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;
}