2013-03-08 44 views
7

我对angularjs相当陌生,但是这里就是这样。我可以通过形式为dd/mm/yyyy的angularjs实现两个日期,但我需要做的是以某种方式减去两个日期以获得两者之间的差异。我创建了一个jquery函数来做到这一点,但我不知道如何将这两个日期传递给函数。所以我想知道是否有不同的方式去做这件事?如何减去两个angularjs日期变量

我想建立一个触发系统,取决于两个日期之间的某些事情要被程式化的天数。例如,如果它在10天内,我希望它使用风格1,如果它在20天内使用风格2等。

+0

什么是你的代码是什么样子? – 2013-03-08 16:27:59

+0

添加了2个答案的任何想法? – 2013-03-15 14:44:34

回答

2

我也是一个angularjs新手,但不会通过使你的javascript视图模型可用的属性来处理这个问题吗?

例如有一个风格根据日期字段而变化(即风格返回样式1,如果差异是10天),并希望通过angularjs绑定更新将传播到屏幕。

我觉得这个正确的术语是计算财产计算财产

编辑

不知道这是你在找什么,但看到小提琴例如计算日期差异并更改所有基于视图模型的属性(范围)的样式

scope.diffscope.col是b属性的2个属性IND到

http://jsfiddle.net/chrismoutray/wfjv6/

HTML

<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> 

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(); 
    }); 
} 

CSS

h2 { position: fixed; right: 10px; top: 10px; color: red; background:white;z-index:1000; } 
input { width: 100px; } 
div { margin: 10px; padding: 10px; } 
+0

嗯,我想真正的问题是我如何计算天的不同? – user1399078 2013-03-08 16:38:59

+0

@ user1399078查看小提琴和代码添加 - 也许这有助于 – 2013-03-08 17:16:33

+0

@ChrisMoutray,这是一个很好的例子,但如何做到这一点在数组中的每个项目? – vittore 2013-05-22 16:03:05

12

基本的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; 

使用日期库(如moment.js)之一:

var d1 = moment("01/16/2013"); 
var d2 = moment("02/26/2013"); 
var days = moment.duration(d2.diff(d1)).asDays(); 
4

你简单地转换成日期戳,然后减去。

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); 
2

这个工程,这里是2完美的JavaScript日期函数,你永远不应该没有...

// Returns the days between a & b date objects... 
function dateDiffInDays(a, b) { 
    var _MS_PER_DAY = 1000 * 60 * 60 * 24; 
    // Discard the time and time-zone information. 
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); 
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); 
    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 

// Calculate how many days between now and an event... 
function daysTill(e) { 
    var eventE = new Date(e); 
    var today = new Date(); 
    return dateDiffInDays(today, eventE); 
} 
+1

如何适应这种方法来计算分钟? – 2017-04-07 21:48:08

+1

它实际上计算以毫秒为单位的差值(千分之一秒)并将结果除以_MS_PER_DAY得到天数。所以,如果你想获得分钟数,你可以添加一个变量“divisor”来替换它,并通过多少ms来分配,或者将_MS_PER_DAY更改为ms每分钟,或者= 1000 * 60 :) – 2017-04-21 19:15:24

+1

谢谢!之后我解决了这个疑问。 :) – 2017-04-21 23:04:15

4

您可以使用angular-moment计算差值,使用amDifference过滤器:

获取毫秒两个日期之间的差异。参数是 日期,单位和usePrecision。日期默认为当前日期。例如:

<span>Difference: {{ dateFrom | amDifference : dateTo : 'days' }} days</span> 
-1

我想下面的一个和它的工作对我来说

var selecteddate = new Date($rootscope.selectvalue); 
$scope.firstDate = selecteddate .getTime(); 
$scope.SecondDate = new Date().getTime(); 

选定的日期是从压延选择之一,它是由父母来范围。第二次约会将是今天的日期。后来我会发现差异使用时刻差异。

var differenceinDays=parseInt(
     moment.duration(
     moment($scope.firstDate).diff(
      moment($scope.SecondDate) 
     ) 
    ).asDays() 
    ); 

我使用parseInt函数,因为我要回整数值仅

希望这个作品

0

当下JavaScript库真的是非常有用的,易于使用:


var parsedServerOutTime = moment(serverOutTime, "HH:mm:ss"); 
var parsedServerInTime = moment(serverInTime, "HH:mm:ss"); 

var milliseconds= parsedServerOutTime.diff(parsedServerInTime) //default milliseconds 
var days = moment.duration(parsedServerOutTime .diff(parsedServerInTime)).asDays();// For days 

asWeeks();asMonths();asYears();等等等等以了解详情http://momentjs.com/docs/