【问题标题】:Get first day of week by date [duplicate]按日期获取一周的第一天[重复]
【发布时间】:2018-10-30 17:51:44
【问题描述】:

我正在尝试按日期获取一周的第一天,

这段代码

  var firstDayOfWeek = new Date(now.setDate(now.getDate() - now.getDay()+1));

返回

2018 年 10 月 29 日星期一 17:50:02 GMT+0000(格林威治标准时间)

如何获取以下格式的日期。

YYYY-MM-DD

【问题讨论】:

  • 你研究过 moment.js 吗?
  • 标题是一个月的第一天,但您似乎得到的是一周的第一天

标签: javascript


【解决方案1】:

考虑到您不想使用 moment.js。

这是一种方法:

var now = new Date()
var firstDayOfWeek = new Date(now.setDate(now.getDate() - now.getDay()+1));

console.log(firstDayOfWeek.toISOString().substring(0,10))
// 2018-10-29

toISOString() 方法使用 ISO 标准将 Date 对象转换为字符串。

标准称为ISO-8601,格式为:YYYY-MM-DDTHH:mm:ss.sssZ

【讨论】:

    【解决方案2】:

    您可以使用date-fns 库的formatfirstDayOfWeek 函数,它不使用moment.js,而仅使用原始Date 对象。

    这是一个实现你想要的sn-p:

    var firstDayOfWeek = format(startOfWeek(now), 'YYYY-MM-DD');

    如果您希望您的一周默认从星期一而不是星期日开始,您可以将第二个参数传递给 startOfWeek,如下所示:

    var firstDayOfWeek = format(startOfWeek(now, { weekStartsOn: 1}), 'YYYY-MM-DD');

    【讨论】:

      【解决方案3】:

      你也可以这样做:

      function getMonday(d) {
        d = new Date(d);
        const day = d.getDay();
        const diff = d.getDate() - day + (day == 0 ? -6 : 1);
        return new Date(d.setDate(diff));
      }
      
      console.log(getMonday(new Date()).toISOString().substring(0, 10));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 2013-11-22
        • 2011-05-08
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多