2010-03-04 76 views
12

我想創建一個簡單的函數,它返回一個具有一定數量的減去天數的日期,所以像這樣但我不知道日期類:從日期減去一定數量的小時,天,月,年

<? 
function get_offset_hours ($hours) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_days ($days) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_months ($months) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_years ($years) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") + $years)); 
} 

print get_offset_years (-30); 
?> 

是否有可能做類似的事情呢? 這種功能工作多年,但如何做到與其他時間類型相同?

+1

一對夫婦的爲你的測試案例:從3月31日減去1個月;從2月29日減去一年。 – 2010-03-04 20:43:10

+0

沒錯,它工作正常! – vitto 2010-03-04 21:07:00

回答

21

幾個小時:

function get_offset_hours($hours) 
{ 
    return date('Y-m-d H:i:s', time() + 3600 * $hours); 
} 

東西LIK Ë將幾個小時,天(使用86400天)工作得很好,但幾個月和一年這是一個有點棘手...

而且你也可以這樣來做:

$date = strtotime(date('Y-m-d H:i:s') . ' +1 day'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 week'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +2 weeks'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 month'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +30 days'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 year'); 

echo(date('Y-m-d H:i:s', $date)); 
-1

是這樣的:

function offset hours($hours) { 
    return strtotime("+$hours hours"); 
} 
11

嘗試使用datetime::sub

例如,從文檔(鏈接):

<?php 

$date = new DateTime("18-July-2008 16:30:30"); 
echo $date->format("d-m-Y H:i:s").'<br />'; 

date_sub($date, new DateInterval("P5D")); 
echo '<br />'.$date->format("d-m-Y").' : 5 Days'; 

date_sub($date, new DateInterval("P5Y5M5D")); 
echo '<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years'; 

date_sub($date, new DateInterval("P5YT5H")); 
echo '<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours'; 

?> 
+0

如果這些對你不起作用,因爲它們是PHP5.3中新增的 – thetaiko 2010-03-04 20:40:32

+0

不幸的是,我有5.2.xx版本,但我會記住它! – vitto 2010-03-04 21:01:51