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
person
Gabriele Petrioli
schedule
11.11.2014