2014-01-27 114 views
0

以下代碼是否存在任何問題(專門針對三元運算符的第10行和第11行)?它似乎沒有工作,我不知道什麼是做錯了。爲什麼這個三元操作符不在這種情況下工作?

$week_start = 1388991600; // Jan 5 2014 
$week_end = 1401602400; // May 31 2014 

// Show the first date's year if it is not in the same year as the end date 
$same_years_week = ($week_start % 31536000 === $week_end % 31536000 ? true : false); 

// Show the second date's month if it is not in the same month as the end date 
$same_months_week = ($week_start % 2592000 === $week_end % 2592000 ? true : false); 

$week_start_range = date('F j' . (!$same_years_week ? ', Y' : ''), $week_start); 
$week_end_range = date((!$same_months_week ? 'F ' : '') . ' j, Y', $week_end); 

$week_range_label = $week_start_range .' — ' . $week_end_range; 

print $week_range_label; 

看來,如果10號線和在我的代碼11,我做!$same_years_week!$same_months_week那麼這兩個始終評估爲真(不管是什麼日期/年設置爲),如果我刪除了!無論給定日期和年/月是什麼,它們中的任何一個都會被評估爲假。

我有它在沙箱設在這裏:http://sandbox.onlinephpfunctions.com/code/2c61baf7e9d2377dabbdd653921dfba7826580a0

而且我用http://www.onlineconversion.com/unix_time.htm生成我最初的變量(模擬在我的網站我收到他們從數據庫格式)。

回答

2

那不是你如何比較年......

$week_start = 1388991600 % 3153600; // 1407600 
$week_end = 1401602400 % 3153600; // 14018400 

這兩個值是不同的,所以你的IF()失敗。

你想:

if (date('Y', $week_start) == date('Y', $week_end)) 

代替,所以你比較實際工作年值,例如2014 == 2014

+0

馬克,謝謝,這是我最終使用的(也用於檢查相同的月份)。不知道爲什麼我一開始並沒有走這條路線,除了我在我的在線調查中讀過某些時候使用過我的上述方法。我相信這個數字(3153600)是一年中的秒數,我相信它可以用於我的代碼,因爲我的日期中沒有設置時間。 – SweetTomato

+0

是的,如果你的時間戳是純粹的日期值,並且h:m:s被清零,那麼它會工作......除非其中一個日期代表閏年,在這種情況下它將被再次破壞。 –

+0

它們純粹是一個日期值,沒有一個日期處於閏年,但它仍然不起作用。這很奇怪。 – SweetTomato

2

嘗試:

$same_years_week = (($week_start % 31536000) === ($week_end % 31536000) ? true : false); 
$same_months_week = (($week_start % 2592000 ) === ($week_end % 2592000 ) ? true : false); 

但是你可以跳過此三元只是做:

$same_years_week = ($week_start % 31536000) === ($week_end % 31536000); 
$same_months_week = ($week_start % 2592000 ) === ($week_end % 2592000 ); 
+0

看到優先php.net/manual/en/language.operators.precedence.php – voodoo417

+0

hsz,謝謝,這似乎並沒有解決我的主要問題,但它確實指出了我的代碼中的問題。 – SweetTomato

+0

@SweetTomato不客氣。 – hsz

0

HSZ說什麼,? true : false沒有多大意義的,可以省略:

$same_years_week = (($week_start % 31536000) === ($week_end % 31536000)); 
$same_months_week = (($week_start % 2592000 ) === ($week_end % 2592000 )); 

同時,應注意與UNIX倍。如果您不在UTC時區,特別是如果您位於UTC東部,則從「第X天00:00:00」計算得出的值可能會換到前一天,甚至在週末換到不同的一週。

+0

謝謝,有關unix時代的有趣筆記。 – SweetTomato

相關問題