2009-03-18 33 views
34

Giả sử tôi có một chuỗi đến, "2007-02-28", mã đơn giản nhất tôi có thể viết để biến điều đó thành "2007-03-01" là gì? Ngay bây giờ tôi chỉ sử dụng strtotime(), sau đó thêm 24*60*60, sau đó sử dụng date(), nhưng chỉ cần tự hỏi liệu có cách làm sạch hơn, đơn giản hơn hoặc thông minh hơn không.Cách đơn giản nhất để tăng ngày trong PHP?

Trả lời

72

Một cách sạch sử dụng strtotime()

$date = strtotime("+1 day", strtotime("2007-02-28")); 
echo date("Y-m-d", $date); 

sẽ cung cấp cho bạn 2007-03-01

29

Đó là sạch hơn và đơn giản hơn để thêm 86400. :)

Cách công nghệ cao là để làm:

$date = new DateTime($input_date); 
$date->modify('+1 day'); 
echo $date->format('Y-m-d'); 

nhưng đó là thực sự chỉ từ xa đáng giá nếu bạn đang làm, chẳng hạn, một chuỗi của các biến đổi vào ngày, thay vì chỉ tìm kiếm ngày mai.

+1

ngốc CentOS chỉ có PHP 5.1 và DateTime được giới thiệu trong 5.2. Tôi đoán cuối cùng tôi phải nâng cấp lên một gói php không chính thức centos sau đó. – davr

+3

Er, không. Chỉ cần thêm 86400 là sự đơn giản sai. – staticsan

+0

Bạn có thể giải thích ý bạn là gì? – chaos

16

Bạn có thể làm việc bổ sung ngay trong strtotime, ví dụ

$today="2007-02-28"; 
$nextday=strftime("%Y-%m-%d", strtotime("$today +1 day")); 
+0

Ồ, gọn gàng. Không biết điều đó. Nó gần giống như ngày cũ tốt :: Manip. – chaos

6

Một cách khác là sử dụng hàm mktime(). Đây là chức năng rất hữu ích ...

$date = "2007-02-28"; 
list($y,$m,$d)=explode('-',$date); 
$date2 = Date("Y-m-d", mktime(0,0,0,$m,$d+1,$y)); 

nhưng tôi nghĩ strtotime() là tốt hơn trong tình huống đó ...

+0

tốt đẹp, tôi đã không nhận ra rằng mktime() sẽ tăng tháng như thế khi bạn đi qua –

5

Cách đơn giản nhất ...

echo date('Y-m-d',strtotime("+1 day")); //from today 

HOẶC kể từ ngày quy định .. . Hel

echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28'))); 
-1
$early_start_date = date2sql($_POST['early_leave_date']); 


     $date = new DateTime($early_start_date); 
     $date->modify('+1 day'); 


     $date_a = new DateTime($early_start_date . ' ' . $_POST['start_hr'] . ':' . $_POST['start_mm']); 
     $date_b = new DateTime($date->format('Y-m-d') . ' ' . $_POST['end_hr'] . ':' . $_POST['end_mm']); 

     $interval = date_diff($date_a, $date_b); 
0

lo bạn có thể thử dưới đây đặc biệt là nếu bạn là tiếng Pháp

$date = date('l j F Y'); 
#increment the date 
$date2 = date('l j F Y', strtotime("+7 day")); 

dịch trong tiếng Pháp bạn có thể sử dụng setlocale() chức năng hoặc chức năng dưới đây:

function fr_date($date){ 

    $date = explode(' ', $date); 

    $date = str_replace('Monday','Lundi',$date); 
    $date = str_replace('Tuesday','Mardi',$date); 
    $date = str_replace('Wednesday','Mercredi',$date); 
    $date = str_replace('Thursday','Jeudi',$date); 
    $date = str_replace('Friday','Vendredi',$date); 
    $date = str_replace('Saturday','Samedi',$date); 
    $date = str_replace('Sunday','Dimanche',$date); 

    $date = str_replace('January','Janvier',$date); 
    $date = str_replace('February','Février',$date); 
    $date = str_replace('March','Mars',$date); 
    $date = str_replace('April','Avril',$date); 
    $date = str_replace('May','Mai',$date); 
    $date = str_replace('June','Juin',$date); 
    $date = str_replace('July','Juillet',$date); 
    $date = str_replace('August','Août',$date); 
    $date = str_replace('September','Septembre',$date); 
    $date = str_replace('October','Octobre',$date); 
    $date = str_replace('November','Novembre',$date); 
    $date = str_replace('December','Décembre',$date); 

    $date = implode(' ',$date); 
    return $date; 

} 
0
$your_date = strtotime("1month", strtotime(date("Y-m-d"))); 
$new_date = date("Y-m-d", $your_date++); 
+0

/("1month") = sẽ tăng theo tháng. // ("1 ngày") = sẽ tăng dần theo ngày. // (ngày ("Y-m-d")) = bắt đầu ngày gia tăng vào ngày hiện tại của bạn. –

+2

Bạn nên chỉnh sửa câu trả lời của mình để bao gồm giải thích mã, thay vì có giải thích trong nhận xét. – astidham2003

Các vấn đề liên quan