【问题标题】:MomentJs Get Years - Not DifferenceMomentJs 获得多年 - 没有差异
【发布时间】:2017-01-06 20:52:03
【问题描述】:

我正在尝试将年份包含在给定的日期范围内。

这样一个用户输入 2015 年 12 月 1 日 - 7 月。 1st 2016。我可以得到 2015,但我还需要包括 2016。

目前我正在将两个日期之间的差异作为年份:

   var tmpStart = moment($scope.dates1.startDate);
    var tmpEnd = moment($scope.dates1.endDate);
    var years = tmpEnd.diff(tmpStart, 'year');
    for (var i = 0; i < years+1; i++) {
        var tmpD = moment($scope.dates1.startDate);
        tmpD.add(i, 'years');
        sc.dtColumns.push(DTColumnBuilder.newColumn(tmpD.format('YYYY')).withTitle('Total ' + tmpD.format('YYYY')));
    }

最好的方法是什么?我确信我可以将年份解析为 int 并进行比较以查看有多少年,但我觉得这不是正确的方法。

【问题讨论】:

  • 你不需要在里面呆一会儿。只需获取开始/结束年份,然后在它们之间循环。:s = 2014; e = 2016; for(y = s, y&lt;=e, y++) { ...} 并获取 2014/2015/2016 - 这并不像曾经(再次)将是一个“闰年”,整个年份都会被跳过
  • 所以基本上只是将年份解析为 int 并进行比较
  • 差不多。无论如何,除了生成年份值之外,您什么也没做,因此立即为它敲打是没有意义的。只需将年份视为整数。现在,如果您确实必须处理部分年份或时髦的增量(“+3 个月 2 天”)或其他什么,那么请坚持使用时刻。但在这种情况下,肯定越简单越好。

标签: javascript momentjs


【解决方案1】:
  $scope.startDate = '01/01/2014';
    $scope.endDate = moment(d).format("MM/DD/YYYY");
    var tmpEndYear = moment(d).format("YYYY");
    var tmpStart = moment("20140101", "YYYYMMDD");
    sc.dtColumns = [DTColumnBuilder.newColumn('ProductNumber').withTitle('Item')];
    var tmpEnd = moment(d);
    $scope.dates1.startDate = moment("20140101", "YYYYMMDD");
    $scope.dates1.endDate = tmpEnd;
    for (var i = 2014; i <= tmpEndYear; i++) {
        sc.dtColumns.push(DTColumnBuilder.newColumn(i).withTitle('Total ' + i));
    }
    while (tmpEnd > tmpStart) {
        sc.months.push(tmpStart.format('MM-YYYY'));
        tmpStart.add(1, 'month');
    }

最终解析出 int 并从那里使用它。

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多