gpt4 book ai didi

php - 优雅的星期功能

转载 作者:可可西里 更新时间:2023-10-31 23:32:29 24 4
gpt4 key购买 nike

我有一个 PHP 函数,它根据当前时间是否处于任意数量的预定义“热区”返回 bool 值。时区是美国/芝加哥 (UTC - 0600)。以下作品:

$d = 60*60;                    /* duration of hotzone */
$o = -(3*24+18)*3600; /* offset to bring UNIX epoch to 12a Sun local*/
$curTime = (time()-$o)%604800; /* time since 12a Sun */

/* Hotzones */
$hotTime = array();
$hotTime[0 ] = (0*24+11)*3600; /* 11a Sun */
$hotTime[1 ] = (0*24+18)*3600; /* 6p Sun */
$hotTime[2 ] = (2*24+19)*3600; /* 7p Tue */
$hotTime[3 ] = (3*24+ 6)*3600; /* 6a Wed */
$hotTime[4 ] = (3*24+11)*3600; /* 11a Wed */

$hotTimes = count($hotTime);

for ($i = $hotTimes-1; $i>=0; $i--) {
if (($curTime > $hotTime[$i])&&($curTime < $hotTime[$i]+$d)) {
return true;
}
}

return false;

但是,我每年必须手动更新两次夏令时,而且我不得不认为有一种比我计算的骇人听闻的“偏移量”更自然、更优雅的方式来做到这一点。有没有人遇到更好的方法来做到这一点,考虑到夏令时?

最佳答案

您可以使用 DateTime为此类:

$hottimes = array (
array(
'start'=> new DateTime('Sun 11:00:00 America/Chicago'),
'stop'=> new DateTime('Sun 12:00:00 America/Chicago')
),
array(
'start'=> new DateTime('Sun 18:00:00 America/Chicago'),
'stop'=> new DateTime('Sun 19:00:00 America/Chicago')
),
array(
'start'=> new DateTime('Tue 19:00:00 America/Chicago'),
'stop'=> new DateTime('Tue 20:00:00 America/Chicago')
),
array(
'start'=> new DateTime('Wed 06:00:00 America/Chicago'),
'stop'=> new DateTime('Wed 07:00:00 America/Chicago')
),
array(
'start'=> new DateTime('Wed 11:00:00 America/Chicago'),
'stop'=> new DateTime('Wed 12:00:00 America/Chicago')
)
);

$now = new DateTime();

foreach($hottimes as $hotime) {
if($now >= $hotime['start'] && $now < $hotime['stop']) {
return true;
}
}

你不应该为这些事情使用 UNIX 时间戳。使用 DateTime 是首选的方式。另请阅读 Sven 的评论。 (谢谢)

关于php - 优雅的星期功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com