Я использую angularjs для отображения списка элементов в jsonArray. и я хочу, чтобы вычислить оставшиеся часы, так что я думаю, что для того, чтобы решить, что мне нужно вычесть текущую дату с датой от jsonArray, который является purchaseTime. Результат должен быть таким, как этот формат: 12 часов
скрипт
angular.module('myApp', []).controller('orderCtrl', function($scope, $filter) {
$scope.orders = ${orderList.raw()};
});
Элемент jsonArray
"purchaseTime": "1449576000000"
HTML
<div ng-app="myApp" ng-controller="orderCtrl">
<div class="divs" ng-repeat="order in orders| orderBy: '+purchaseTime'">
<div>
<ul>
<li><p>{{$index + 1}}</p></li>
<li><p>{{(Date.now() - order.purchaseTime) | date:"h"}}</p></li>
</ul>
</div>
</div>
Я думаю, что я не получаю правильное оставшееся время. Любая помощь очень ценится. Спасибо!
Вы можете создать настраиваемую директиву для этой цели:
Javascript
var app = angular.module("myApp", []);
app.controller("orderCtrl", function($scope) {
$scope.orders = [{id:1,"purchaseTime": "1449651824588"},{id:2,"purchaseTime": "1449665002689"}];
});
app.directive("calcTime", function($compile) {
var timeDifference;
var currentDate;
var deadLine;
var diffDays;
var diffHours;
var diffMinutes;
return {
restrict: 'A',
link: function (scope, element, attrs) {
currentDate = new Date();
deadLine = new Date(parseInt(attrs.calcTime)); // setting purchase time Date Object
deadLine = new Date(deadLine.setDate(deadLine.getDate()+1)); // setting purchase time Date Object + 1 day
timeDifference = (deadLine.getTime()) - (currentDate.getTime()); // deadline data minus current date
var diffDays = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
var diffHours = Math.floor(timeDifference / (1000 * 60 * 60));
var diffMinutes = Math.floor((timeDifference-(diffHours*(1000 * 60 * 60))) / (1000 * 60));
element.html(diffDays + " days, " + diffHours + " hours and "+ diffMinutes +" minutes till DeadLine")
}
};
})
HTML
<div ng-app="myApp" ng-controller="orderCtrl">
<div class="divs" ng-repeat="order in orders| orderBy: '+purchaseTime'">
<div>
<ul>
<li>Purchase Time: {{order.purchaseTime | date:'MM/dd/yyyy - hh:mm'}}<p calc-time="{{order.purchaseTime}}"></p></li>
</ul>
</div>
</div>
Рабочий JSFIDDLE
Используя объект Date:
var a = new Date(); // Now
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // 2010
var d = (b-a); // difference in milliseconds
Вы можете получить количество секунд, разделив миллисекунды на 1000 и округляя число:
var seconds = Math.round((b-a)/1000);
Затем вы могли бы получить минуты, разделив секунды на 60, затем на часы, разделив минуты на 60, затем на дни, разделив часы на 24 и т.д.
Вы заметите, что я предоставил некоторые значения для второго объекта Date. Эти параметры следующие:
// new Date(year, month, day, hours, minutes, seconds, milliseconds)
Вам необязательно предоставлять все эти значения, если они не нужны для даты, которую вы хотите представить. Требуются только month
и year
, остальные являются необязательными.