8

私はangularjsにかなり慣れていませんが、これで終わりです。形式で angularjs を使用して 2 つの日付を指定できますdd/mm/yyyyが、2 つの日付を減算して 2 つの日付の差を取得する必要があります。これを行うために jquery 関数を作成しましたが、関数に 2 つの日付を渡す方法がわかりません。だから、これについて別の方法があるかどうか疑問に思っていましたか?

特定のものを様式化するために、2 つの日付の間の日数に応じてトリガー システムを設定しようとしています。たとえば、10 日以内の場合はスタイル 1を使用し、20 日以内の場合はスタイル 2を使用します。

4

7 に答える 7

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;

Date ライブラリ (moment.js など) の 1 つを使用します。

var d1 = moment("01/16/2013");
var d2 = moment("02/26/2013");
var days = moment.duration(d2.diff(d1)).asDays();
于 2013-03-08T17:14:09.330 に答える
5

日付をタイムスタンプに変換してから減算するだけです。

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);
于 2014-09-01T10:35:52.817 に答える
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);
}
于 2014-09-08T01:29:59.360 に答える
2

私もangularjsの初心者ですが、javascriptビューモデルを介してプロパティを利用できるようにすることでこれを処理しませんか?

たとえば、日付フィールドに基づいて変更されるスタイルフィールドがあり (つまり、差が 10 日の場合、スタイルはスタイル 1 を返します)、できれば angularjs バインディングを介して更新が画面に反映されます。

これの正しい用語は、計算されたプロパティまたは計算されたプロパティだと思います

編集

これがあなたが探しているものかどうかはわかりませんが、日付の差分を計算し、ビューモデル(スコープ)のプロパティに基づいてスタイルを変更する例については、フィドルを参照してください

scope.diffそしてscope.colバインドする2つのプロパティです

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; }
于 2013-03-08T16:35:59.423 に答える
-1

以下のものを試してみましたが、うまくいきました

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

選択された日付は、カレンダーから選択された日付であり、親スコープからのものです。2 番目の日付は今日の日付になります。後で、moment diff を使用して違いを見つけます。

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

整数値のみを返したいので、parseIntを使用しています

これがうまくいくことを願っています

于 2015-10-29T18:25:27.747 に答える