2013-03-08 63 views
7

Tôi khá mới với angularjs, nhưng ở đây nó đi. Tôi có thể hai ngày qua angularjs dưới dạng dd/mm/yyyy, nhưng những gì tôi cần làm là bằng cách nào đó trừ hai ngày để có được sự khác biệt trong ngày giữa hai. Tôi tạo ra một hàm jquery để làm điều này, nhưng tôi không biết làm thế nào để vượt qua trong hai ngày để chức năng. Vì vậy, tôi đã tự hỏi nếu có một cách khác để đi về điều này?Làm thế nào để trừ hai biến ngày angularjs

Tôi đang cố gắng thiết lập hệ thống kích hoạt tùy thuộc vào số ngày giữa hai ngày cho những thứ nhất định được cách điệu. Ví dụ: nếu trong vòng 10 ngày, tôi muốn nó sử dụng kiểu 1 và nếu trong vòng 20 ngày, hãy sử dụng kiểu 2 và cứ tiếp tục như vậy.

+0

gì mã của bạn trông như thế nào? –

+0

Bất kỳ suy nghĩ nào về 2 câu trả lời được thêm vào? –

Trả lời

2

Tôi cũng là người mới làm quen với góc cạnh nhưng bạn sẽ không xử lý điều này bằng cách cung cấp các thuộc tính thông qua mô hình chế độ xem javascript của bạn?

Ví dụ: có trường kiểu thay đổi dựa trên các trường ngày (nghĩa là kiểu trả về 1 khi chênh lệch là 10 ngày) và hy vọng thông qua các angularjs ràng buộc các bản cập nhật sẽ lan truyền tới màn hình.

Tôi nghĩ rằng thuật ngữ thích hợp cho đây là một tài sản tính hoặc sở hữu tính

EDIT

Không chắc nếu đây là những gì bạn đang tìm kiếm nhưng thấy fiddle ví dụ của tính toán ngày tháng khác biệt và thay đổi tất cả các kiểu dựa trên các thuộc tính của mô hình khung nhìn (phạm vi)

scope.diffscope.col là 2 thuộc tính để b 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

tôi đoán vấn đề thực sự là làm cách nào để tính toán sự khác biệt trong ngày? – user1399078

+0

@ user1399078 xem fiddle và mã được thêm vào - có thể điều này sẽ giúp –

+0

@ChrisMoutray là ví dụ tuyệt vời nhưng cách thực hiện cho từng mục trong mảng? – vittore

12

Basic javascript cách:

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; 

Sử dụng một trong các thư viện ngày (như moment.js):

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

bạn chỉ cần chuyển đổi ngày vào dấu thời gian và sau đó trừ.

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

Công trình này, và đây là 2 chức năng ngày hoàn hảo javascript bạn không bao giờ nên ...

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

Làm thế nào để kết nối phương pháp này để tính toán với phút? –

+1

Nó thực sự tính toán sự khác biệt trong mili giây, (phần nghìn giây) và chia kết quả theo _MS_PER_DAY để nhận ngày. Vì vậy, nếu bạn muốn nhận được số phút, bạn chỉ có thể thêm biến "số chia" để thay thế và chuyển số lượng ms để chia hoặc thay đổi _MS_PER_DAY thành ms mỗi phút hoặc = 1000 * 60 :) –

+1

Cảm ơn! Tôi đã giải quyết được sự nghi ngờ này sau đó. :) –

4

Bạn có thể sử dụng angular-moment để tính toán sự khác biệt, bằng cách sử dụng bộ lọcamDifference:

Lấy sự khác biệt giữa hai thời điểm trong mili giây. Tham số là ngày, đơn vị và usePrecision. Ngày mặc định là ngày hiện tại. Ví dụ:

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

tôi đã cố gắng dưới đây một và nó làm việc ra cho tôi

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

ngày đã chọn là một trong đó được chọn từ lịch và nó đến từ phạm vi phụ huynh. ngày thứ hai sẽ là ngày hôm nay. sau đó tôi sẽ tìm thấy sự khác biệt bằng cách sử dụng thời điểm khác nhau.

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

Tôi đang sử dụng parseInt vì tôi muốn trả về giá trị số nguyên chỉ

Hope làm việc này

0

Khoảnh khắc thư viện JavaScript thực sự là rất hữu ích và dễ sử dụng:


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(); vv vv để biết thêm chi tiết kiểm tra http://momentjs.com/docs/

Các vấn đề liên quan