2017-02-03 19 views
2

私は不動産アプリケーションを実装しており、2つの日付間の日付差を正確にチェックする必要があります。 私はこれにはjavascriptjqueryのアプローチを推奨しますが、他の解決策を歓迎します。2つの日付間の正確な差を取得

私の目標は、違いが正確に2(または5)年を超える日付をユーザーが入力することを許可しないことです。

私は、多くの人と一緒に、このソリューションを試してみました: How to get the months between 2 dates

残念ながら、これは私が本当に必要なものではありません。私は

: 家賃は私の目的のために正しいである、(正確に2年間でレンタル)私は24ヶ月を取得します2017年1月1日 で開始し、31-12-2018 で終了します。

しかし、私はしようとした場合: 家賃は2017年1月1日 で開始し、2019年1月1日 で終了します私はまだ24ヶ月を取得します(しかし、それは2年と1日でレンタルされます)、それは私の目的には合っていません。

私の国(オランダ)の法律上の規制により、上記の2つの状況の間に大きな違いがあります。

私はあなたのお手伝いをさせていただきます。

+4

なぜ2年を追加して1日を減算するのですか? –

+2

副作用として、javascriptを使用していても、このサーバー側を確認したり、検証したりする必要があります。そうしないと、結果が信頼できません(投稿前にjavascript/htmlを変更することができます)。 –

答えて

0

これが正確であるとうるう年などに注意する必要があります...コメントで述べたように

<?php  
$date = date_create('02-01-2017'); 
date_add($date, date_interval_create_from_date_string('2 years')); 
$twoyears = date_format($date, 'd-m-Y'); 
echo $twoyears; // 02-01-2019 

$rentperiod = $twoyears->sub(DateInterval::createFromDateString('1 day')); 
echo $rentperiod; //01-31-2019 
+0

オブジェクト指向の 'DateTime'クラスが優れています。少なくとも、うるう年を念頭におく必要はありません。 –

+0

あなたの返事をありがとう。ユーザーが入力する終了日はわかりません。これは、すべての日数で2年を超えることができます。実際、01-01-2019の代わりに私が02-01-2019をしているなら、私が使っている解決策は、私の目的が正しいために私に25ヶ月を与えます。 – Franco

+0

これ以外にも 'Calling sub on string'というエラーが表示されます。 – Franco

1

は、2年間の追加と1日を引きます。 PHPマニュアルでUser Contributed Notesから、

string(10) "31-12-2018" 
+0

ご返信ありがとうございます。ユーザーが入力する終了日はわかりません。これは、すべての日数で2年を超えることができます。 – Franco

+0

私はあなたの解決策を試してみました。開始日を01-01-2017として使用すると、正しい(2年間)31-12-2018になります。しかし、私が15-01-2017のような開始日を使うと、それは私に3年である14-12-2019を与えるでしょう。何か案が? – Franco

+0

私の悪い!今月中旬には翌年に行くというのは当然の論理です。私はこれを試してみましょう。あなたの答えを投稿してくれてありがとう – Franco

0

ここSunilKmChardeことにより、優れた機能があります:

$dt = DateTime::createFromFormat('d-m-Y', '01-01-2017'); 

$dt->add(new DateInterval('P2Y')); 
$dt->sub(new DateInterval('P1D')); 

var_dump($dt->format('d-m-Y')); 

これは望ましい結果を生成します:ベストDateTimeクラスでそれを行うには

<?php 
    ////////////////////////////////////////////////////////////////////// 
    //PARA: Date Should In YYYY-MM-DD Format 
    //RESULT FORMAT: 
    // '%y Year %m Month %d Day %h Hours %i Minute %s Seconds'  => 1 Year 3 Month 14 Day 11 Hours 49 Minute 36 Seconds 
    // '%y Year %m Month %d Day'         => 1 Year 3 Month 14 Days 
    // '%m Month %d Day'           => 3 Month 14 Day 
    // '%d Day %h Hours'           => 14 Day 11 Hours 
    // '%d Day'              => 14 Days 
    // '%h Hours %i Minute %s Seconds'        => 11 Hours 49 Minute 36 Seconds 
    // '%i Minute %s Seconds'          => 49 Minute 36 Seconds 
    // '%h Hours             => 11 Hours 
    // '%a Days              => 468 Days 
    ////////////////////////////////////////////////////////////////////// 
    function dateDifference($date_1 , $date_2 , $differenceFormat = '%a') 
    { 
     $datetime1 = date_create($date_1); 
     $datetime2 = date_create($date_2); 

     $interval = date_diff($datetime1, $datetime2); 

     return $interval->format($differenceFormat); 

    } 
?> 
0

Javascript:

 

    function diff(d1, d2){ 
     x = new Date(d2-d1); 
     return x.getUTCDate() + " " + x.getUTCMonth() + " " + (x.getUTCFullYear() - 1970); 
    } 

例:

a = new Date('01-01-2017'); 
b = new Date('01-01-2019'); 
diff(a,b); 
"Days:1, Months: 0, Years: 2" 
関連する問題