如何以360天/年,30天/月的格式获取两个日期之间的差异?

问题描述:

我可以用下面的代码得到两个日期(DD/MM/YY格式)之间的差异;如何以360天/年,30天/月的格式获取两个日期之间的差异?

$date1 = new DateTime("1986-04-27"); 
$today = new DateTime("now"); 
$interval = $date1->diff($today); 
$year  = $interval->format('%y'); 
$month  = $interval->format('%m'); 
$day  = $interval->format('%d'); 

计算1年当两个个月,但,当我试图计算1年3个月3个日子里完美的作品,它并没有给我准确的结果。

我想获得的区别两个日期间,使用360天了一年,30天为一个月,而无需计算闰年..

例如;如果一个月有31天,系统将计算为30天。 如果一年有365天,系统将计算为1年5天。 (360 + 5)

我该怎么做?

谢谢..

+0

我真的不明白你想要什么(为什么)来实现,但我认为日期转移到天应该是起点。那么你只需360或30,... – Jeff

+0

因此,当两个之间有8个实际年,你想要8年1个月和10天?似乎很奇怪...... – trincot

+0

我试图用这种方式进行计算的原因是因为我正在研究一个计算退休年龄的项目。我们的政府计算一年360天,一个月30天。我不知道为什么.. @杰夫 – iwocan

下面是做到这一点的方式:

function diff360($date1, $date2) { 
    $date1 = new DateTime($date1); 
    $date2 = new DateTime($date2); 
    $diff = $date1->diff($date2); 
    $days = ($date2->format('d') + 30 - $date1->format('d')) % 30; 
    return array(
     "y" => $diff->y, 
     "m" => $diff->m, 
     "d" => $days, 
     "totaldays" => $diff->y * 360 + $diff->m * 30 + $days 
    ); 
} 

$result = diff360("2016-02-06", "2016-03-06"); 
var_export($result); 

输出:

array (
    'y' => 0, 
    'm' => 1, 
    'd' => 0, 
    'totaldays' => 30, 
) 
+0

感谢您的回答,但如果您将今天的日期(2016-02-06)计算出来,您将看到结果为29.我不想以日历格式进行此计算。 – iwocan

+0

你能澄清吗?我不知道你的意思?日期设置为1986-04-27和2016-02-06,我没有29。上述代码的输出在这些日期为30 2 17。这意味着在那些日子里你可以适应360天的30年,以及30天和17天的2个月。这不是你想要的吗? – trincot

+0

你可以试试这个代码吗? [链接](http://pastebin.com/L5EHyF4W) 它会给你29天,因为它是以日历格式计算日期,但我不想用日历格式得到结果。我想计算一个月(不是29或31)的30天和一个月的360(不是365) – iwocan

DateTime类将根据真实日期计算差异。在你的例子中,它是否会起作用是随机的。如果你想要使用自定义长度的月份,忽略闰年等,那么你将不得不自己创建自定义函数。

我真的不明白这样做的意义吗?

+0

嗨,我无法自己创建自定义函数,这就是为什么我问:) 我正在从事一个项目,现在这个项目正在使用这种日期格式。 – iwocan

只需获取天数并减去年/月。

$totalDays = $interval->format('%a'); 
$years = 0; 
$months = 0; 
while ($totaldays >= 360) { $years++; $totaldays -=360; } 
while ($totaldays >= 30) { $months++; $totaldays -=30; } 
$days = $totalDays 

但是,为什么你需要一个破损的日期格式?

+0

谢谢你的回答。我写了下面的代码; $ date1 = new DateTime(“2016-02-06”); $ today = new DateTime(“now”); $ interval = $ date1-> diff($ today); $ year = $ interval-> format('%y'); $ month = $ interval-> format('%m'); $ day = $ interval-> format('%d'); $ totalDays = $ interval-> format('%a'); echo $ totalDays; ,结果是29天,因为二月份今年有29天,但我想用一个月的30天做这个计算。我想用30天计算几个月。 – iwocan