我的 PHP 日期时间代码有什么问题?
What's wrong with my PHP datetime code?
我对 PHP 没有经验。到目前为止,我很喜欢它,只是这段代码有时可以工作,有时则根本不工作。
我正在尝试根据一天中的时间进行重定向。我在多个域上设置了这个脚本,每个域都有不同的时间。有时它能正常工作,有时却不能。我已经修改了我的 php.ini 文件以及 .htaccess 以尝试设置时区。我试过用我的服务器所在的 CST 写时间(Hostgator),但也没有运气。我应该注意到这里有一些 HTML 跟随我的代码,但它在 php.
之外
我不明白为什么它只在某些时候有效。我曾多次尝试清除浏览器缓存,但无济于事。在此代码中,它应该只在 5:47 PM 和 6:43 PM 之间显示其下方的 html 并在所有其他时间重定向,对吗?这是某种缓存问题吗?当我连续访问多个站点时,脚本是否被存储然后没有被执行?任何帮助是极大的赞赏。
最好的情况是这只发生在我身上,因为我访问网站的次数太多,无法确保脚本正常工作。这可能吗?
<?php
date_default_timezone_set('America/Los_Angeles');
$hour = date("G");
$min = date("i");
if(($hour >= "0" and $min >= "00") and ($hour <="17" and $min <= "47"))
{
header('Location: http://mysite.php');
exit();
}
elseif(($hour >= "18" and $min >= "43") and ($hour <="23" and $min <= "59"))
{
header('Location: http://mysite.php');
exit();
}
?>
尝试使用 intval()
获取实际整数并进行比较:
date_default_timezone_set('America/Los_Angeles');
$hour = intval( date("G"), 10 );
$min = intval( date("i"), 10 );
if(( $hour >= 0 and $min >= 0 ) and ( $hour <= 17 and $min <= 47 ))
{
header('Location: http://mysite.php');
exit();
}
elseif (( $hour >= 18 and $min >= 43 ) and ( $hour <= 23 and $min <= 59 ))
{
header('Location: http://mysite.php');
exit();
}
您正在做的是比较 字符串 ,这是逐个字符的比较(它们在 ASCII table 中的顺序)。因此,例如,如果您比较 "13" > "10"
,那是正确的,因为 "1" == "1"
(等于,继续)然后是 "3" > "1"
(真,returns 真)。
但是如果你比较"098" > "100"
呢? "0" > "1"
(错误,returns 错误)。显然它不适合你的目的,因为 098 = 98 实际上小于 100.
编辑: 正如@DCoder 正确提到的那样,字符串首先转换为数字(整数),然后进行比较。我强烈建议确保将它们显式转换为数字,然后进行比较以避免在处理字符串时可能出现的问题。
这里是缩短代码,我把时间转换成了军用时间。如果军事时间小于 1747 或大于 1843 - 它将重定向,否则将显示 HTML 内容
date_default_timezone_set('America/Toronto');
$hour = date("G");
$min = date("i");
$milTime = $hour . $min ;
if($milTime < 1747 || $milTime > 1843)
{
header('Location: http://whosebug.com/questions/');
echo "Redirect";
exit();
}
echo "<h1>$milTime Show HTML Content</h1>";
我对 PHP 没有经验。到目前为止,我很喜欢它,只是这段代码有时可以工作,有时则根本不工作。
我正在尝试根据一天中的时间进行重定向。我在多个域上设置了这个脚本,每个域都有不同的时间。有时它能正常工作,有时却不能。我已经修改了我的 php.ini 文件以及 .htaccess 以尝试设置时区。我试过用我的服务器所在的 CST 写时间(Hostgator),但也没有运气。我应该注意到这里有一些 HTML 跟随我的代码,但它在 php.
之外我不明白为什么它只在某些时候有效。我曾多次尝试清除浏览器缓存,但无济于事。在此代码中,它应该只在 5:47 PM 和 6:43 PM 之间显示其下方的 html 并在所有其他时间重定向,对吗?这是某种缓存问题吗?当我连续访问多个站点时,脚本是否被存储然后没有被执行?任何帮助是极大的赞赏。
最好的情况是这只发生在我身上,因为我访问网站的次数太多,无法确保脚本正常工作。这可能吗?
<?php
date_default_timezone_set('America/Los_Angeles');
$hour = date("G");
$min = date("i");
if(($hour >= "0" and $min >= "00") and ($hour <="17" and $min <= "47"))
{
header('Location: http://mysite.php');
exit();
}
elseif(($hour >= "18" and $min >= "43") and ($hour <="23" and $min <= "59"))
{
header('Location: http://mysite.php');
exit();
}
?>
尝试使用 intval()
获取实际整数并进行比较:
date_default_timezone_set('America/Los_Angeles');
$hour = intval( date("G"), 10 );
$min = intval( date("i"), 10 );
if(( $hour >= 0 and $min >= 0 ) and ( $hour <= 17 and $min <= 47 ))
{
header('Location: http://mysite.php');
exit();
}
elseif (( $hour >= 18 and $min >= 43 ) and ( $hour <= 23 and $min <= 59 ))
{
header('Location: http://mysite.php');
exit();
}
您正在做的是比较 字符串 ,这是逐个字符的比较(它们在 ASCII table 中的顺序)。因此,例如,如果您比较 "13" > "10"
,那是正确的,因为 "1" == "1"
(等于,继续)然后是 "3" > "1"
(真,returns 真)。
但是如果你比较"098" > "100"
呢? "0" > "1"
(错误,returns 错误)。显然它不适合你的目的,因为 098 = 98 实际上小于 100.
编辑: 正如@DCoder 正确提到的那样,字符串首先转换为数字(整数),然后进行比较。我强烈建议确保将它们显式转换为数字,然后进行比较以避免在处理字符串时可能出现的问题。
这里是缩短代码,我把时间转换成了军用时间。如果军事时间小于 1747 或大于 1843 - 它将重定向,否则将显示 HTML 内容
date_default_timezone_set('America/Toronto');
$hour = date("G");
$min = date("i");
$milTime = $hour . $min ;
if($milTime < 1747 || $milTime > 1843)
{
header('Location: http://whosebug.com/questions/');
echo "Redirect";
exit();
}
echo "<h1>$milTime Show HTML Content</h1>";