问题
我正在使用AngularJS,在我看来,我连续7天如下图所示。红色,灰色和蓝色基于日期(2013年9月9日星期日)。当我点击星期五或星期一时,我希望返回该日期,以便我可以使用该日期的统计数据重新加载0/3。
我不需要任何花哨的AngularJS我无法弄清楚采用基准日期的逻辑,然后在被点击的那一天切换出来。
如何让它返回日期?
看起来像什么
我目前正在尝试从以下位置转换此功能:
JavaScript - get the first day of the week from current date
function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
return new Date(d.setDate(diff));
}
getMonday(new Date()); // Mon Nov 08 2010
我在渲染统计数据时渲染日期服务器端。
使用AngularJS:
答案 0 :(得分:2)
忘记它的样子,让我们专注于你拥有的数据。
如果我正确理解你,你有一个类似的关联数组:
[{'M',0},{'T',1},{'W',2},{'T',3},{'F',4},{'S',5},{'S',6}]
您还有一个基准日期
var base = moment('2013-09-01');
基数与最后一个值相关联 - 6。
那么你能做的就是这样:
var x = 3; // I clicked on Thursday and got a 3
var target = base.subtract('days', 6-x); // move back 6-x days
这样可行,但首先要预先计算你的关联数组会不会更容易?
[{'M','2013-08-26'},
{'T','2013-08-27'},
{'W','2013-08-28'},
{'T','2013-08-29'},
{'F','2013-08-30'},
{'S','2013-08-31'},
{'S','2013-09-01'}]
然后你就会知道点击它时要使用的值。
答案 1 :(得分:1)
时刻day()
的问题是星期日== 0,而不是星期一,所以你必须跳回一周并使用范围1..7
进行星期一...周日:
base = '9/1/2013'
console.log(moment(base).day(-7).day(4))
> Thu Aug 29 2013 00:00:00 GMT+0100
console.log(moment(base).day(-7).day(7))
> Sun Sep 01 2013 00:00:00 GMT+0100