我对angularjs相当新,但它在这里.我可以在表单中通过angularjs进行两次约会dd/mm/yyyy,但我需要做的是以某种方式减去两个日期以获得两者之间的天数差异.我创建了一个jquery函数来执行此操作,但我不知道如何将两个日期传递给函数.所以我想知道是否有不同的方法可以解决这个问题?
我正在尝试根据两个日期之间的天数来设置触发系统,以便对某些事物进行风格化.例如,如果它在10天内,我希望它使用样式1,如果它在20天内使用样式2,依此类推.
Ste*_*wie 13
基本的javascript方式:
var d1 = new Date('01/16/2013');
var d2 = new Date('02/26/2013');
var milliseconds = d2-d1;
var seconds = milliseconds / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;
Run Code Online (Sandbox Code Playgroud)
使用其中一个Date库(例如moment.js):
var d1 = moment("01/16/2013");
var d2 = moment("02/26/2013");
var days = moment.duration(d2.diff(d1)).asDays();
Run Code Online (Sandbox Code Playgroud)
您只需将日期转换为时间戳,然后减去.
var Date1 = 08/16/2004;
var Date2= 10/24/2005;
var timestamp1 = new Date(Date1).getTime();
var timestamp2 = new Date(Date2).getTime();
var diff = timestamp1 - timestamp2
var newDate = new Date (diff);
Run Code Online (Sandbox Code Playgroud)
我也是一个 angularjs 新手,但是你不会通过 javascript 视图模型提供属性来处理这个问题吗?
例如,有一个根据日期字段更改的样式字段(即,如果差异为 10 天,则样式返回样式 1),并且希望通过 angularjs 绑定,更新将传播到屏幕。
我认为正确的术语是计算属性或计算属性
编辑
不确定这是否是您正在寻找的内容,但请参阅小提琴,例如计算日期差异和更改样式,所有这些都基于视图模型的属性(范围)
scope.diff和scope.col是要绑定的 2 个属性
http://jsfiddle.net/chrismoutray/wfjv6/
超文本标记语言
<script src="http://code.angularjs.org/0.10.4/angular-0.10.4.min.js" ng:autobind></script>
<div ng:controller="ComputedPropertiesCtrl">
first date <input ng:model="firstdate"> second date <input ng:model="seconddate"> difference {{diff}}
<div>when the difference is greater than 10 color changes to green</div>
<div>eg set the second date to 15/01/2013</div>
<div style="background-color:{{col}};"> State </div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
function ComputedPropertiesCtrl() {
var scope = this;
scope.firstdate = '01/01/2013';
scope.seconddate = '10/01/2013';
scope.data_before = [];
scope.differenceInDays = function() {
var dt1 = scope.firstdate.split('/'),
dt2 = scope.seconddate.split('/'),
one = new Date(dt1[2], dt1[1]-1, dt1[0]),
two = new Date(dt2[2], dt2[1]-1, dt2[0]);
var millisecondsPerDay = 1000 * 60 * 60 * 24;
var millisBetween = two.getTime() - one.getTime();
var days = millisBetween / millisecondsPerDay;
return Math.floor(days);
};
scope.color = function() {
return (scope.differenceInDays() > 10) ? 'green' : 'red';
};
scope.$watch('[firstdate, seconddate]', function(currScope,newVal,oldVal) {
scope.data_before = oldVal;
scope.diff = scope.differenceInDays();
});
scope.$watch('[firstdate, seconddate]', function(currScope,newVal,oldVal) {
scope.data_before = oldVal;
scope.col = scope.color();
});
}
Run Code Online (Sandbox Code Playgroud)
CSS
h2 { position: fixed; right: 10px; top: 10px; color: red; background:white;z-index:1000; }
input { width: 100px; }
div { margin: 10px; padding: 10px; }
Run Code Online (Sandbox Code Playgroud)