Moment.JS获得给定日期之前的星期日

时间:2016-08-29 19:45:04

标签: javascript

我正在修改Angular的UI Bootstrap Datepicker以允许一周的选择模式。为了使其有效运作,我需要将activeDate设置为给定周的第一个星期日,因此如果您选择日期,例如2016年8月29日的星期一,它会将您的选择转换为16/28/16周日早些时候。

这就是选择功能的样子。如果有兴趣在警报匹配的else if块中转换为星期日逻辑。

$scope.select = function(date) {
    if ($scope.datepickerMode === self.minMode) {
      var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0);
      dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
      dt = dateParser.toTimezone(dt, ngModelOptions.timezone);
      ngModelCtrl.$setViewValue(dt);
      ngModelCtrl.$render();
    } 

    else if($scope.datepickerMode =="week")
      {
        alert("Match!");
        self.activeDate = date.firstSundayofthatweek() //what do I actually put here using Moment.js?
       setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);
      $scope.$emit('uib:datepicker.mode');
      }

    else {
      self.activeDate = date;
      setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);
      $scope.$emit('uib:datepicker.mode');
    }

    $scope.$broadcast('uib:datepicker.focus');
  };

我使用的是moment.js,但无法在他们的文档中弄清楚如何做到这一点。一个香草JS答案也将不胜感激。传递给函数的date是日期对象。

时刻文档建议:

moment().day(-7);

moment().weekday(-7);

但是我传递的是日期对象,而不是片刻......所以我转换或链接还是什么?抱歉有点困惑......我还需要将日期对象返回self.activeDate

2 个答案:

答案 0 :(得分:4)

要从特定时刻获得最后一个星期日,只需在当时使用day()以及日期名称。

var today = moment("29.08.2016", "DD.MM.YYYY");
var sunday = today.day("Sunday");
console.log(sunday.format("YYYY-MM-DD"));

如果您有一个Date对象,只需将其解析为

moment(new Date());

答案 1 :(得分:0)

Moment使用星期日作为一周的第一天:

const lastSunday = currentDate => {
  const date = moment(currentDate).startOf('week');
  return date._d;
};