我正在修改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
答案 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;
};