2017-02-03 38 views
2

我正在实施一个房地产应用程序,我需要确切地检查两个日期之间的日期差异。 我会更喜欢这个javascriptjquery的方法,但任何其他解决方案将受到欢迎。获取两个日期之间的确切区别

我的目标是不允许用户输入差异大于2(或5)年的日期。

我都试过了,与许多人一起,此解决方案: How to get the months between 2 dates

不幸的是,这不是我所真正需要的。

当我这样做: 租金将在2017年1月1日开始 ,并将在31-12-2018 结束,我将获取24个月(正好租2年),这是我的目的是正确的。

但如果我尝试: 租金将在2017年1月1日开始 ,并将在2019年1月1日 最后我还是会获取24个月(但它是租2年,1天),这对我的目的不正确。

由于我国(荷兰)的法律规定,上述两种情况之间的合同存在很大差异。

我会很感激你方的任何帮助。

+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

感谢您的回复。我们不知道用户输入的结束日期。这可以在每一天的时间内超过两年。事实上,如果代替01-01-2019我做02-01-2019那么我使用的解决方案给了我25个月,这是为了我的目的。 – Franco

+0

此外,这会给我一个错误'调用子字符串'; – Franco

1

正如评论所说,加2年减1天。

$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类做

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

感谢您的回复。我们不知道用户输入的结束日期。这可以在每一天的时间内超过两年。 – Franco

+0

我给你的解决方案一试。如果我使用01-01-2017的开始日期,它会给我31-12-2018,这是正确的(2年)。但是当我使用15-01-2017这样的开始日期时,它会给我14-12-2019这3年。任何想法? – Franco

+0

我的不好!当然,从本月中旬开始将会进入明年。我会试试这个。感谢您发布您的答案 – Franco

0

这是一个被SunilKmCharde一个很好的功能,在PHP手册的User Contributed Notes

<?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" 
相关问题