我正在尝试根据单个日期查找将形成整周的所有日期。
因此,如果日期位于星期三的中间,那么它将在星期日,星期一,直到星期六。
以下是一个例子:
所以,假设我 2012年10月10日星期三。
我会将这个日期对象传递给函数,函数将返回['2012-10-07', '2012-10-08', '2012-10-09', '2012-10-10', '2012-10-11', '2012-10-12', '2012-10-13']
(我不想要字符串,但Date对象,字符串仅用于示例^^
我已经尝试过自己了,但是我创建的方法很长很愚蠢,无论如何都是这样:https://gist.github.com/3889121
但我在这里主要寻找的是指示。使用什么,有更简单的方法吗?
谢谢!
答案 0 :(得分:2)
试试这个:
var date = new Date('2012/06/25');
var day = date.getDay();
var array = []
for(var i=0;i<7;i++){
if(i-day!=0){
var days = i-day;
var newDate = new Date(date.getTime()+(days * 24 * 60 * 60 * 1000));
array.push(newDate);
}
else
array.push(date);
}
alert(array);
<强> Working Fiddle 强>
答案 1 :(得分:2)
这是一个函数,它返回从给定日期之前的第一个星期日到下一个星期日的Date实例数组:
function getWeek(fromDate){
var sunday = new Date(fromDate.setDate(fromDate.getDate()-fromDate.getDay()))
,result = [new Date(sunday)];
while (sunday.setDate(sunday.getDate()+1) && sunday.getDay()!==0) {
result.push(new Date(sunday));
}
return result;
}
// usage
var week = getWeek(new Date('2012/10/10'));
console.log(week[0]); //=> Sun Oct 07 2012 00:00:00
console.log(week[6]); //=> Sat Oct 13 2012 00:00:00
只是为了好玩,使用Array.map
的较短版本(oneliner)作为Date.prototype
Date.prototype.getWeek = function(){
return [new Date(this.setDate(this.getDate()-this.getDay()))]
.concat(
String(Array(6)).split(',')
.map ( function(){
return new Date(this.setDate(this.getDate()+1));
}, this )
);
}
// usage
new Date('2012/10/10').getWeek(); //=> [07/10/2012, ... ,13/10/2012]
答案 2 :(得分:0)
使用Date.js库http://www.datejs.com 你可以做到
someDate.next().sunday()
答案 3 :(得分:0)
这可能会对您有所帮助,您可以输入yeat:int,month:int和day:int,它将找到最近的最后一个星期日,然后增加7天。最后,它将返回一个日期范围。您可能需要修改输出以适合您的需求。如果您的month int数组从1到12,请保留_monthint-1,否则可以将其删除。
var moment = require('moment');
let getDatesSundayTo7DaysAheadFromADay = function( _yearint, _monthint, _dayint ){
var input = new Date(_yearint, _monthint - 1, _dayint)
let getLastSunday = function (d) {
var t = new Date(d);
t.setDate(t.getDate() - t.getDay());
return t;
}
let lastsunday = getLastSunday(input)
let addDays = function(dateObj, numDays) {
var newdate = JSON.parse(JSON.stringify(dateObj));
for(var i = 1; i < numDays ; i++){
newdate = moment(newdate).add(1, 'days')
}
return newdate
}
let sevendaysahead = addDays(lastsunday, 7)
function getDates(startDate, stopDate) {
var dateArray = [];
var currentDate = moment(startDate);
var stopDate = moment(stopDate);
while (currentDate <= stopDate) {
dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
currentDate = moment(currentDate).add(1, 'days');
}
return dateArray;
}
return getDates(lastsunday, sevendaysahead);
}