【问题标题】:get next week start and end using jquery and moment js使用 jquery 和 moment js 获取下周开始和结束
【发布时间】:2014-04-04 09:26:42
【问题描述】:

我搜索了这个问题,发现Stackoverflow上没有答案。所以我决定回答它...

如果您需要将下周/上周的开始/结束以星期一作为一周的开始,则此问题会有所帮助。

【问题讨论】:

    标签: javascript jquery momentjs daterangepicker


    【解决方案1】:

    我为此使用了 moment js ...你可以从 here 获得它

         /*
         all functions return moment() object.. <br>
         GetNextWeekStart().format('DD/MM/YYYY') to get 24/02/2014
         */
    
         function GetNextWeekStart() {
                var today = moment();
                //edited part
                var daystoMonday = 0 - (today.isoWeekday() - 1) + 7;       
                var nextMonday = today.subtract('days', daystoMonday);
    
                return nextMonday;
            }
    
            function GetNextWeekEnd() {
                var nextMonday = GetNextWeekStart();
                var nextSunday = nextMonday.add('days', 6);
    
                return nextSunday;
            }
    
            function GetLastWeekStart() {
                var today = moment();
                var daystoLastMonday = 0 - (1 - today.isoWeekday()) + 7;
    
                var lastMonday = today.subtract('days', daystoLastMonday);
    
                return lastMonday;
            }
    
            function GetLastWeekEnd() {
                var lastMonday = GetLastWeekStart();
                var lastSunday = lastMonday.add('days', 6);
    
                return lastSunday; 
            }
    

    【讨论】:

    • 这不起作用(不再?) - 在GetNextWeekStart 如果today 是星期二,我得到以下信息:&gt; today.format('ddd, D-M-Y'); OUTPUT: 'Tue, 22-11-2016' &gt; daystoMonday = 0 - (today.isoWeekday() - 1) + 7; OUTPUT 6 &gt; nextMonday = today.subtract('days', daystoMonday) &gt; nextMonday.format('ddd, D-M-Y') OUTPUT 'Wed, 16-11-2016' 不应该@987654329 @改为today.add('days', daystoMonday)
    【解决方案2】:

    这是在the lang file 中指定的,您可以包含lang/en-au.jslang/en-gb.js 文件并设置所需的语言标准。假设您在英国:

    moment.lang('en-gb');
    

    如果您不想使用自定义语言,可以将其更改为默认的美国语言环境:

    moment.lang('en-custom', {
        week: {
            dow: 1,
            doy: 6 // Adjust the first week of the year, depends on the country. For the US it's 6. For the UK, 4.
        }
    });
    

    那么你可以这样做:

    var date = '2014-03-24';
    
    console.log('next start', moment(date).weekday(7).format('DD/MM/YYYY')); 
    console.log('next end', moment(date).weekday(13).format('DD/MM/YYYY')); 
    
    console.log('prev start', moment(date).weekday(-7).format('DD/MM/YYYY')); 
    console.log('prev end', moment(date).weekday(-1).format('DD/MM/YYYY')); 
    
    console.log('current start', moment(date).weekday(0).format('DD/MM/YYYY')); 
    console.log('current end', moment(date).weekday(6).format('DD/MM/YYYY')); 
    
    /*
    next start 31/03/2014 
    next end 06/04/2014 
    prev start 17/03/2014 
    prev end 23/03/2014 
    current start 24/03/2014
    current end 30/03/2014
    */
    

    http://jsfiddle.net/WGXxn/3/

    【讨论】:

    • 谢谢!这似乎是更好(和更强大)的方法。特别是因为它支持语言环境。
    【解决方案3】:

    聚会有点晚了,但这是我发现表达周开始/结束的最简单方法。 isoWeek 参数根据ISO 8601 从星期一开始几周,而week 开始几周取决于您的语言环境(所以可能是星期日或星期一)。

    本周:

    moment().startOf('isoWeek')
    moment().endOf('isoWeek')
    

    下周:

    moment().add(1, 'weeks').startOf('isoWeek')
    moment().add(1, 'weeks').endOf('isoWeek')
    

    上周:

    moment().subtract(1, 'weeks').startOf('isoWeek')
    moment().subtract(1, 'weeks').endOf('isoWeek')
    

    我喜欢这些结构,因为它们具有令人难以置信的可读性。通过在subtractadd 中指定所需的周数,也可以轻松返回或前进任意周数。

    【讨论】:

    • moment().endOf('week') 应该是 moment().endOf('isoWeek')
    • 请注意,.startOf("week") 实际上取决于区域设置,因此它可能并不总是星期日。
    • 我试图通过以下方式获得上周的第一天:moment().subtract(1, 'weeks').startOf('week') 我得到了星期天(没关系),然后我将我的时区更改为美国和加拿大,但仍然是星期天,而我预计会是星期一,这是为什么呢? @Dr.Acula
    • @OffirPe'er 我不认为星期一是美国/加拿大一周的开始 - 你应该在法国/德国或其他欧洲国家尝试一下.顺便说一句,在 moment.js 中开始的整个一周故事已经烂透了。为什么不使用简单的 setter 'setWeekStartDay` 来代替在服务器端运行代码时可能不是用户的有缺陷的语言环境?
    【解决方案4】:
        //Last week (get current week array list from momentjs)
        var sd = moment(currentWeekFd[0]).subtract(7, 'days').format();
        var ed = moment(currentWeekEd[6]).subtract(7, 'days').format();
        var lastWeekStratDay = moment(sd).format('YYYY-MM-DD');
        var lastWeekEndDay = moment(ed).format('YYYY-MM-DD');
        console.log(lastWeekStratDay +', '+ lastWeekEndDay)
    
        //Next week
        var sd = moment(currentWeekFd[0]).add(7, 'days').format();
        var ed = moment(currentWeekEd[6]).add(7, 'days').format();
        var nextWeekStratDay = moment(sd).format('YYYY-MM-DD');
        var nextWeekEndDay = moment(ed).format('YYYY-MM-DD');
        console.log(nextWeekStratDay +', '+ nextWeekEndDay)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2010-11-19
      相关资源
      最近更新 更多