2011-03-29 21 views
1

以及即時獲得在墨西哥夏季時間。PHP的日期起計1月初在使用此功能

function horarioVerano() { 
$year = date("Y"); 
$ahora = strtotime(date("d-m-Y")); 

$inicio_invierno = strtotime("last Sunday April $year"); 
//echo date('Y-m-d H:i:s', $inicio_invierno); 

$fin_invierno = strtotime("last Sunday November $year"); 
//echo date('Y-m-d H:i:s', $fin_invierno); 

if ($ahora > $inicio_invierno && $ahora <= $fin_invierno) 
    $num = 5; 
else 
    $num = 6; 

return $num; 

}

,但我總是得到前一個月的日期,如果我echo date("Y-m-d",$inicio_invierno)我得到2011-03-27和2011-04-24不是因爲它應該是,同任何其他月份我walways得到比上月

回答

1

「最後一個星期日四月$年」被解析爲「四月$年」(這給人的第一月的),然後計算「上週日」相對於這一點。如果你想四月的最後一個週日,說這一點:「上週日四月$今年」。詳情請參閱the documentation

+0

非常感謝,偉大的工作! – Gustavo 2011-03-29 17:35:52

+0

請記住,格式「2012年10月的第一個星期一」在PHP 5.2.7之前不適用於PHP。因此,如果您收到包含1970年的任何日期 - 您將需要在strtotime()函數中省略「of」。但是,在時間戳中使用「First」將無法在5.2.7之前的PHP版本上正常工作 - 但strtotime仍可用於「Last」等其他選項。 – 2013-02-16 09:05:16

1

究竟是這點?

$ahora =strtotime(date("d-m-Y")); 

您構建一個基於字符串的日期,然後用的strtotime把它放回一個時間值(這是一個整數),()。多麼浪費CPU週期。如何

$ahora = time(); 

呢?

+0

謝謝!效果很好。 – Gustavo 2011-03-29 17:36:57

+0

注意,'時間()'是不完全等同於'的strtotime(日期( 「d-M-Y」))';後者返回當天開始時間的時間戳,而前者返回當前時間的時間戳。額外的精度會導致'$ ahora <= $ fin_invierno'測試的結果不同。 – Anomie 2011-03-29 22:09:13