2014-01-27 47 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

相关问题