根据该日期的星期几获取日期

时间:2013-09-01 18:11:31

标签: javascript date momentjs

问题

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

我不需要任何花哨的AngularJS我无法弄清楚采用基准日期的逻辑,然后在被点击的那一天切换出来。


如何让它返回日期?

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

看起来像什么

enter image description here


我目前正在尝试从以下位置转换此功能:

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:

2 个答案:

答案 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