4

问题

我正在使用 AngularJS,在我看来,我有 7 天的时间,如下图所示。红色、灰色和蓝色基于日期(2013 年 9 月 1 日星期日)。当我单击星期五或星期一时,我希望返回该日期,以便我可以使用该日期的统计数据重新加载 0/3。

对于 AngularJS,我不需要任何花哨的东西我无法弄清楚获取基准日期的逻辑,然后将这一天切换到被点击的那一天。


我如何让这个返回日期?

  • 当前基准日期:2013 年 9 月 1 日 - 星期日
  • 我点击:星期四
  • 我收到:2013 年 8 月 29 日 - 星期四
  • 我点击:星期天
  • 我收到:2013 年 9 月 1 日

它看起来像什么

在此处输入图像描述


我目前正在尝试将此功能转换为:

JavaScript - 从当前日期获取一周的第一天

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:

4

2 回答 2

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'}]

然后,您将已经知道单击它时要使用的值。

于 2013-09-02T03:40:56.097 回答
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
于 2013-09-01T19:15:11.440 回答