#javascript
#JavaScript
Вопрос:
Это выражение оценивается как true. Почему?
if ($scope.state.dateStart < $scope.state.previousStart || $scope.state.dateEnd > $scope.state.previousEnd) {
При отладке я вижу, что значения одинаковы, поэтому выражение не должно быть истинным:
Редактировать: в какой-то момент предыдущие значения устанавливаются следующим образом:
$scope.state.previousStart = new Date($scope.state.dateStart);
$scope.state.previousEnd = new Date($scope.state.dateEnd);
Редактировать: это фабрика angular, показывающая, как изначально определены значения.
app.factory('historyRepository', ['$http', '$rootScope', function ($http, $rootScope) {
var state = {
allBatches: [],
filteredBatches: [],
selectedBatch: null,
allStatuses: [],
dateStart: new Date(),
dateEnd: new Date(),
previousStart: new Date(),
previousEnd: new Date()
}
// Set initial start and end date times
var date = new Date();
date.setDate(date.getDate() - 7); // 7 days ago
state.dateStart = new Date(date);
state.previousStart = new Date(date);
state.dateEnd.setHours(23, 59, 59, 999); // Use ending of end date. (hour,min,sec,millisec)
state.previousEnd.setHours(23, 59, 59, 999); // Use ending of end date. (hour,min,sec,millisec)
return state;
}]);
Комментарии:
1. Не вставляйте изображение, а только текст, спасибо
2.
dateStart
определяется первым, поскольку вы ничего не передавали конструктору (из `date), он использует текущее время, поэтому он старше.3. где
dateEnd
иpreviousEnd
определены?4. Жиль: Я не могу показать значения отладки без вставки изображения. Памблам: это было бы верно, если бы я использовал эти начальные значения, но они были изменены позже. На скриншоте вы можете видеть, что у них одинаковое время.
5. @charlietfl Я отредактировал свой пост, чтобы показать это.
Ответ №1:
Проблема была в моих конечных датах; в частности, в миллисекундах. При установке даты с использованием существующей даты миллисекунды не задаются. Необходимо установить миллисекунды, чтобы даты были равны.
$scope.state.previousEnd = new Date($scope.state.dateEnd);
$scope.state.previousEnd.setMilliseconds(999);
// Now previousEnd and dateEnd are the same.
Я смог увидеть, что даты не совпадали, делая это:
// Show milliseconds since January 1, 1970
console.log('dateEnd', $scope.state.dateEnd.getTime());
console.log('previousEnd', $scope.state.previousEnd.getTime());
И вот результат:
dateEnd 1476331199999 previousEnd 1476331199000