2017-10-13 55 views
-1

我需要修改代碼,以便它將發送2年的日期而不僅僅是一年。DateInterval:從現在起的年份

我試圖更改爲$year_from_now->add(new DateInterval('P2Y'));但它不起作用。

請參見下面的代碼:

$year_from_now=new DateTime(); 

    $year_from_now->add(new DateInterval('P1Y')); 


    $dates_array = array(); 

    foreach ($tariffs as $beds24_room_type=>$tariff_type_dates) { 

     $counter = 1; 

     foreach ($tariff_type_dates as $tariff_type=>$tariff_dates) { 

      $odo = "p".$counter; 

      foreach ($tariff_dates as $date=>$tariff_details) { 

       $this_date=date_create(date("Y/m/d" , strtotime($date))); 

       $diff=date_diff($year_from_now,$this_date); 

       if ( 

        (int)$diff->format("%R%a") <= 0 && // Up to one year from today 

        (int)$diff->format("%R%a") > -365 // Not earlier than today 

        ) { 
+1

'添加(「+ 1年」)'不這樣做的嗎? – Qirel

+1

'$ date-> add(new DateInterval('P2Y'));'是正確的工作代碼;在generell中'它不會工作'不是一個有效的錯誤描述 - 指定你期望的結果,以及實際結果是什麼 - 用最少的代碼顯示錯誤行爲。 –

+0

添加對date_default_timezone_set()的調用。這是我必須做的,才能讓它在我的系統上運行。 – Nic3500

回答

1

。在你自己的代碼中的問題。 P2Y應該可以工作。

嘗試在一個空文件來執行下面的代碼,你會發現它是正確的

<?php 
    $year_from_now=new DateTime(); 
    $year_from_now->add(new DateInterval('P2Y')); 

    echo $year_from_now->format('Y-m-d H:i:s'); 
?> 
+0

只有在設置中設置了date.timezone或者如果您調用了date_default_timezone_set(),它纔會起作用。無論如何,這就是它在我的系統上所做的。 – Nic3500

+0

這沒有任何意義,如果您沒有正當理由,則無需冷靜觀察。學習PHP並在回答廢話之前閱讀問題+答案。如果問題出現在時區中,則P1Y不起作用。 – Boratzan

+0

你說過:「試着在一個空文件中執行下面的代碼,你會發現它是正確的」,它不起作用。 – Nic3500