moment()
总是返回当前日期/时间。
您需要将对它的引用存储到变量中,然后将其用于操作。
(并且由于您有其他变量取决于它,我将创建一个一次设置所有这些变量的函数)
所以在控制器中我将顶部更改为
var currentDate,
weekStart,
weekEnd,
shortWeekFormat = 'MMMM Do';
function setCurrentDate(aMoment){
currentDate = aMoment,
weekStart = currentDate.clone().startOf('week'),
weekEnd = currentDate.clone().endOf('week')
}
// initialize with current date
setCurrentDate(moment());
// use these methods for displaying
$scope.currentWeek = function(){ return currentDate.format(shortWeekFormat); };
$scope.currentWeekStart = function(){ return weekStart.format(shortWeekFormat); };
$scope.currentWeekEnd = function(){ return weekEnd.format(shortWeekFormat); };
然后为下周/上周创建两种方法
$scope.nextWeek = function(){
setCurrentDate(currentDate.add(7,'days'));
};
$scope.prevWeek = function(){
setCurrentDate(currentDate.subtract(7,'days'));
};
(moment.js 实现valueOf
,所以你可以直接比较)
最后改变你的星期过滤器来实际比较日期(使用.isSame()
,.isBefore()
和.isAfter()
)而不是时刻对象(这是错误的,因为你不能对自定义对象进行直接比较)
$scope.week = function(item) {
var eventTime = moment(item.jsdatetime);
if ((eventTime.isSame(weekStart) || eventTime.isAfter(weekStart))&&
(eventTime.isSame(weekEnd) || eventTime.isBefore(weekEnd))) return true;
return false;
};
$scope.week = function(item) {
var eventTime = moment(item.jsdatetime);
return (eventTime >= weekStart && eventTime <= weekEnd);
};
(你也很可能想要元素而ng-repeat
不是li
ul
)
演示在 http://codepen.io/gpetrioli/pen/QwLRQB