根据日期获取该周的某一天的日期

4

问题

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

对于AngularJS我不需要过于复杂的逻辑,但我无法想出取一个基本日期然后切换为点击的日期的逻辑。


如何返回日期?

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

它是什么样子的

enter image description here


我正在尝试转换此函数:

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:


我还不熟悉moment.js,但是快速查看API后,我猜测代码应该是:moment([2013, 1, 9]).add('d', clickedDay) - Ingo Bürk
你能否编辑一下这个问题吗?我已经读了三遍,但是我并没有看到你实际在问什么。 - Matt Johnson-Pint
@MattJohnson,我刚刚重写了我的问题,抱歉我在措辞上遇到了一些困难,希望现在更加清晰明了。 - Michael J. Calkins
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'}]

如果你已经知道在点击时要使用哪个值,那么你就可以直接使用它。


我采纳了你的建议,只是预先渲染它。这样更简单,我已经在我的问题中发布了代码。 - Michael J. Calkins

1
使用 moment 的 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

当我点击下个月时,它似乎会跳回7天。 scope.date = moment(scope.date).day(-7).day(newDay + 1).format("M/D/YYYY"); 控制台截图 - Michael J. Calkins
我不确定我理解了。你能在 jsfiddle 上发布你的应用程序吗? - georg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接