2017-05-29 7 views
0

Ich möchte genaue Monat und Tage zwischen zwei Daten berechnen.Wie berechnet man den Zeitraum zwischen zwei Daten - angularjs

Wenn mein Startdatum ist "12. Januar 2014" und mein Enddatum ist "27. März 2017".

Ich sollte als "38 Monate und 15 Tage" erhalten.

Aber ich kann nur Nein finden. von Tagen zwischen Startdatum und Enddatum. Ich brauche Hilfe, um Monate und Tage zwischen Startdatum und Enddatum zu finden.

Dann muss ich die 15 Tage durch Nein teilen. von Tagen des Enddatumsmonats.

Kann mir jemand helfen? Ich bin neu auf dem Laufenden.

var date = new Date(); 
      console.log("date: "+date); 
      var currentDate = $filter('date')(date, "yyyy-MM-dd HH:mm:ss"); 

      $scope.userdob = "2017-01-29"; 
      var dobdate = $filter('date')($scope.userdob, "yyyy-MM-dd HH:mm:ss"); 

      console.log("dob: "+dobdate); 

      /* differentiate Date */    
      var date1 = $filter('date')($scope.userdob, "yyyy-MM-dd"); 
      var date2 = $filter('date')(date, "yyyy-MM-dd"); 

      date1 = date1.split('-'); 
      date2 = date2.split('-'); 

// Now we convert the array to a Date object, which has several helpful methods 
date1 = new Date(date1[0], date1[1], date1[2]); 
date2 = new Date(date2[0], date2[1], date2[2]); 

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000) 
var date1_unixtime = parseInt(date1.getTime()/1000); 
var date2_unixtime = parseInt(date2.getTime()/1000); 

// This is the calculated difference in seconds 
var timeDifference = date2_unixtime - date1_unixtime; 

// in Hours 
var timeDifferenceInHours = timeDifference/60/60; 

// and finaly, in days :) 
$scope.timeDifferenceInDays = timeDifferenceInHours/24; 
      console.log("timeDifferenceInDays: "+$scope.timeDifferenceInDays); 
+1

Warum nicht eine vorhandene Bibliothek wie Moment.JS verwenden? – jonrsharpe

+0

Im Gegensatz zu Sekunden, Minuten und Stunden; Monate und Tage haben kein festes Verhältnis. Ein Monat kann von "28" bis "31" Tagen sein. Wenn Sie Dinge in _months_ messen möchten, brauchen Sie die Tage möglicherweise nicht einzubeziehen. – Halcyon

Antwort

2

starten:

function monthCalculator() { 
 
    var d1 = new Date(); 
 
    var d2 = new Date('2013', '02', 12); 
 
    var years = d1.getFullYear() - d2.getFullYear(); 
 
    var months = d1.getMonth() - d2.getMonth(); 
 
    var totalMonths = (years * 12) + months; 
 
    var d1Date = d1.getDate(); 
 
    var d2Date = d2.getDate(); 
 
    var days = d1Date - d2Date; 
 
    var d1LastDate = null; 
 
    var d2LastDate = null; 
 
    if(days < 0) { 
 
     var d1LastDate = new Date(d1.getFullYear(), d1.getMonth() + 1, 0).getDate(); 
 
     var d2LastDate = new Date(d2.getFullYear(), d2.getMonth() + 1, 0).getDate(); 
 
     if(d1Date != d1LastDate || d2Date != d2LastDate) { 
 
      totalMonths -= 1;   
 
      days = (new Date(d2.getFullYear(), d2.getMonth() + 1, 0).getDate()) + days; 
 
     } else { 
 
      days = 0; 
 
     } 
 
    } 
 
    console.log(totalMonths); 
 
    return totalMonths; 
 
}

+0

Vielen Dank. – sudarsan

+1

Für den 31. Januar 2017 bis zum 28. Februar 2017 gibt das 0 Monate zurück, sollte es nicht 1 zurückgeben? Ähnliches gilt für den 31. Mai bis 30. Juni und überall dort, wo das Ende des Startmonats eine geringere Anzahl als das Ende des Endmonats hat. – RobG

+0

@RobG, ja du hattest recht, ich habe diesen Fall nicht berücksichtigt. Danke für den Hinweis auf den Fall. Überprüfen Sie die aktualisierte Antwort. –

1

Ich Interpretieren es falsch, aber sollte es nicht sein, nur

var diffMonths = date2.getMonth() - date1.getMonth(); 
var diffDays = date2.getDate() - date1.getDate(); 
var diffYears = date2.getYear() - date1.getYear(); 
    diffMonths += 12* diffYears 

if(diffDays<0){ 
     diffMonths -= 1; 
     var daysInMonth = new Date(date2.getYear(), date2.getMonth()-1, 0).getDate(); 
     diffDays = daysInMonth + diffDays; 
} 
console.log('The difference between the two dates is ' + diffMonths + ' months and ' + diffDays + ' days'); 

Grüße Vielleicht Chris

+0

Vielen Dank. – sudarsan

Verwandte Themen