【问题标题】:Get date by day of week based from that date根据该日期按星期几获取日期
【发布时间】:2013-09-01 18:11:30
【问题描述】:

问题

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

对于 AngularJS,我不需要任何花哨的东西


如何让它返回日期?

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

外观


我目前正在尝试将此函数转换为:

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:

【问题讨论】:

  • 我还不知道 moment.js,真的,但快速浏览一下 API,我猜:moment([2013, 1, 9]).add('d', clickedDay)
  • 你能编辑这个来问一个问题吗?我已经读了 3 遍了,我看不出你在问什么。
  • @MattJohnson 我刚刚重写了我的问题,抱歉,我在措辞上遇到了一些困难,所以它清晰简洁。

标签: javascript date momentjs


【解决方案1】:

忘记它的样子,让我们专注于您拥有的数据。

如果我对您的理解正确,您有一个关联数组,例如:

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

那么你就已经知道点击它时使用什么值了。

【讨论】:

  • 我按照您的建议进行了预渲染。简单得多,我在我的问题中发布了代码。
【解决方案2】:

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");Console screenshot
  • 我不确定我是否理解。你能在 jsfiddle 上发布你的应用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
相关资源
最近更新 更多