我正在查看stackoverflow和谷歌的类似问题,但没有找到适合我的问题的答案。如果我有任何机会让一个重复的问题通过,我仍然很抱歉。如果你好心地指出我的话,请告诉我。
我的问题是我需要编写一个在PHP中以H格式格式化的计划,但现在我需要添加半小时但不知道如何。这是我的代码,所以你可以更好地理解我的意思:
$time = (int)date('H');
if($time>=24 && $time<6)
{
//some code...
}
else if($time>=6 && $time<18) //My problem is here, I need it to be 18:30
{
//some other code...
}
//code goes on for rest of hours of the day
我尝试将$ time更改为(int)date('H:i'),但是当我写的时候 if($ time&gt; = 6:00&amp;&amp; $ time&lt; 18:00) 由于':'
,我收到错误编辑:好的,我尝试了两种方式,这是代码的样子
date_default_timezone_set('America/Lima');
if (!isset($timestamp)) {
$timestamp = time();
}
$dw = date( "w", @$timestamp);
$time = date('HH:ii');
if($dw>0 && $dw<=4)
{
if($time>="00:00" && $time<"04:00")
{
$show->current = "A";
$show->next= "B";
}
else if($time>="04:00" && $time<"06:30")
{
$show->current = "B";
$show->next= "C";
}
else if($time>="06:30" && $time<"09:00")
{
$show->current = "C";
$show->next= "D";
}
它一直持续到00:00再次。问题是这种方式似乎无法在所有日期识别出来,所以如果我编辑当前的C时间从06:00而不是06:30开始,它就不会在我的网站上更新。
date_default_timezone_set('America/Lima');
if (!isset($timestamp)) {
$timestamp = time();
}
$dw = date( "w", @$timestamp);
$time = date('G');
if($dw>0 && $dw<=4)
{
if($time>=0 && $time<4)
{
$show->current = "A";
$show->next= "B";
}
else if($time>=4 && $time<6.5)
{
$show->current = "B";
$show->next= "C";
}
else if($time>=6.5 && $time<9)
{
$show->current = "C";
$show->next= "D";
}
在这里它更新很好,但是它不能识别6.5为6:30,所以当时不是像C节目那样获得当前,我继续得到B.
答案 0 :(得分:2)
如果您想直接比较半小时时间,则必须将hh:mm
转换为数字格式,例如
# 6:45
$hours = 6 + (45 /60); # represent as fractional hours
$minutes = (6 * 60) + 45; # represent in minutes only.
然后您可以直接进行直接比较:
# 6am 6:30pm
if (($hours > 6) && ($hours <= 18.5))
if (($minutes > 360) && ($minutes < 1125))
答案 1 :(得分:1)
您正在将$time
转换为整数,这就是它无效的原因
尝试:
$time = date('H:i'); // <-- without the "(int)" part
if (($time >= "00:00") && ($time < "06:00")) {
//some code...
} else if (($time >= "06:00") && ($time < "18:30") {
//some other code...
} else {
//code goes on for rest of hours of the day
}
修改强>:
确保将0到9之间的小时数设为零,例如使用06:...
代替6:...
(单挑到Marc B)。
<强> EDIT2 强>:
根据格式字符H
和i
的{{3}}:
# format
# character Description Returned values
# H 24-hour format of an hour with leading zeros 00 through 23
# i Minutes with leading zeros 00 to 59
因此,预计{$ 1}}到00:00
的值在$ time(不是23:59
)。
答案 2 :(得分:-1)
H仅返回小时数。您需要使用$ minutes = date(&#39; i&#39;)获得单独的分钟值。使用
将$ minutes添加到您的elseifif($time>=6 && ($time<19 && $minutes < 30) )
编辑: 正如Marc B指出的那样,如果$ time超过6,少于19但是分钟超过30,例如7:45(有效时间),这将失败。
解决方案应该像专家系统建议的那样。使用日期(&#34;嗨&#34;)或(int)日期(&#34; Gi&#34;);
如果希望使用$ minutes,则应进一步添加OR子句。像
这样的东西if( $time>=6 && ($time<18 || ($time == 18 && $minutes < 30)) )