【问题标题】:Moment.JS - Get date from week numberMoment.JS - 从周数获取日期
【发布时间】:2017-08-09 04:38:49
【问题描述】:

我在 moment.js 的文档中没有看到这一点。也许我跳过了它,但我想将一年中的周数转换为日期格式。

例如

week: number = 13 
year: number = 2017
date: date = // get date format for the first day of that week

我正在使用 moment.js,但在 documentation 中找不到我想要的。这可能吗?我找到了一些纯 javascript 的答案,但由于我已经在使用 moment.js,我认为可能有一种简单的方法来做到这一点

【问题讨论】:

  • 根据您如何定义一天的星期数,只需将日期设为 2017 年 1 月 1 日,然后添加 13*7 天。

标签: javascript angular typescript momentjs


【解决方案1】:

无需添加: moment().year(2017).week(13);

【讨论】:

    【解决方案2】:

    是的,有可能:

    var date = moment('2017').add(13, 'weeks');
    

    请注意,moment('2017') 返回 2017 年 1 月 1 日。

    【讨论】:

    • 如何正确地将其转换为日期格式? moment('2017').add(13, 'weeks'); 没有为我提供日期类型,使用 moment(this.dateSelection.otherYear).add(this.dateSelection.otherMonth, "months").toDate(); 给我这个结果 Mon Jun 01 1970 01:00:02 GMT+0200 (Romance Daylight Time) 所以年份不正确,月份是正确的。
    • 此方法失败,因为给定年份的开始可能在任何工作日。
    • 我在 1970 年遇到了同样的问题。它也使我的浏览器(FF)变砖。在这里帮助我的是通过完整的日期,例如:let date = moment('2019-01-01).add(13, 'weeks');
    【解决方案3】:

    使用 startOf('isoweek') 您将获得一周的第一天。

    moment('2017').add(13, 'weeks').startOf('week').format('DD MM YYYY'); // "02 04 2017"m, gives you Sunday(last day of the week)
    
    moment('2017').add(13, 'weeks').startOf('isoweek').format('DD MM YYYY');
    "27 03 2017"// first day of the week ( gives you Monday)
    

    【讨论】:

      【解决方案4】:

      另一种方法是使用format string

      var dateLocale = moment(week + " " + year, "ww gggg");
      var dateISO = moment(week + " " + year, "WW GGGG");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-24
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多