2016-10-05 2 views
1

phpスニペットまたはether jsまたはjqueryのいずれかの月だけでなく、月と年の2つの日付間の月数の合計を計算する必要があります。JQueryで2つの日付間の月を計算する必要があります

Iは、PHPタグ{{$ job-> job_start_date}} job_start_dateを使用して、バックエンドのデータを表示するには、開始日付のためのものであり、{{$ job-> job_expiry_date}})job_expiry_dateは、終了日のためのものです。

私の出力は2016年10月13日のようになります。彼らに 私は隠されたとして、この事は値を入れてみましたが、それは(新しい日付を追加しながら、適切に解析すると動作することができませんでした)

$(document).ready(function(){ 
    var sDate = $("#monthStart").val(); 
    var nDate = $("#monthEnd").val(); 

    var sd = new Date(sDate); 
    var ed = new Date(nDate); 
    ed.setDate(ed.getDate() - sd.getDate()); 
    alert(monthDiff(sd,ed)); 
}); 


function monthDiff(d1, d2) { 
    var months; 
    months = (d2.getFullYear() - d1.getFullYear()) * 12; 
    months -= d1.getMonth() + 1; 
    months += d2.getMonth(); 
    return months <= 0 ? 0 : months; 
} 

のjs jqueryのやPHPで簡単な解決策を必要としています。

+0

私はangularjsホップで作成しましたそれはあなたを助けます。 http://codepen.io/halimmln/pen/NRPBBK – halim

+0

月数の定義方法は明確ではありません。たとえば、30th/9月と1/10月の差は1ヶ月または0ヶ月になるでしょうか?一般的に、日時を使って作業するときは、コーナーケースのために[momentjs](http://momentjs.com/)のようなライブラリを使用することをお勧めします。 –

+0

私は28日としてそれを数える必要があります –

答えて

1
function differenceInMonths($startDate, $endDate) 
{ 
    $date1 = new DateTime($startDate); 
    $date2 = new DateTime($endDate); 

    $interval = date_diff($date1, $date2); 

    return $interval->m + ($interval->y * 12) . ' months'; 
} 

このようにして、月の今月から= 11の年を計算することができます。

0

この場合、moment.jsライブラリを利用することができます。

Date Stringが「1-Sept-2016」のような形式であるとすると、それを日付に変換して瞬時に適用する必要があります。すでにDateがある場合は、momentを直接適用することができます。

デモ:

var startDate = new Date('01-Sept-2016'); 
 
var endDate = new Date('30-Oct-2016'); 
 
    
 
var endMoment = moment(endDate); 
 
var startMoment = moment(startDate); 
 

 
//[days, years, months, seconds, ...] 
 
console.log(endMoment.diff(startMoment, 'months'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.js"></script>

あなたも、上記のようあなたがdaysmonthsyearssecondsようにしたいの違いを指定することができます。

参考:http://momentjs.com/

0
function MonthDiff(date1, date2) { 
    var Nomonths; 
    Nomonths= (date2.getFullYear() - date1.getFullYear()) * 12; 
    Nomonths-= date1.getMonth() + 1; 
    Nomonths+= date2.getMonth() +1; // we should add + 1 to get correct month number 
    return Nomonths <= 0 ? 0 : Nomonths; 
} 
0

ここでは、PHPソリューションです:

$noMonth = 1 + (date('Y',strtotime($job->job_expiry_date)) - date('Y',strtotime($job->job_start_date))) * 12 + (date('m',strtotime($job->job_expiry_date)) - date('m',strtotime($job->job_start_date))) 

最初の部分は、12件の結果、月の数を乗じ、年間での差を算出する:

1 +(日付( 'Y' のstrtotime($ job-> job_expiry_date)) - 日付( 'Y' のstrtotime($ job-> job_start_date)))* 12

第二の部分は、計算加算または減算する月数、日付が同じ年にあったかのように:

(日付( 'M'、のstrtotime($ job-> job_expiry_date)) - 日付( 'M'、のstrtotime ($ job-> job_start_date)))

関連する問題