问题描述
我正在使用在 Calendar Recurring/Repeating Events - Best Storage Method 上找到的代码
有人可以帮我让脚本从给定日期开始运行吗?脚本运行良好,但总是从今天开始。
我想改变: $Now = strtotime("今天"); 到 $Now = strtotime("2021-04-01");
// $Now = strtotime("today");
//$Now = date( "Y-m-d",strtotime( "2009-01-31" ));
//$Now = date("Y-m-d",strtotime("2014-12-31") );
//$Now = "2013-04-11";
//$Now = date("Y-m-d",strtotime("2015-04-01"))."\n";
//$Now = strtotime('2007-12-21');
$Now = strtotime('11-11-2007');
$pushToFirst = 0;
for($i = $pushToFirst; $i < $pushToFirst+3; $i++)
{
$Now = strtotime("+".$i." day");
//$Now = date("+".$i." day");
$year = date("Y",$Now);
$month = date("m",$Now);
$day = date("d",$Now);
$NowString = $year . "-" . $month . "-" . $day;
$week = (int) ((date('d',$Now) - 1) / 7) + 1;
$weekday = date("N",$Now);
echo $NowString . "<br />";
echo $week . " " . $weekday . "<br />";
$sql = "SELECT EV.*
FROM `planering1` EV
RIGHT JOIN `planering_namn` PN1 ON PN1.`NAMN` = EV.`namn`
RIGHT JOIN `planering_Meta` EM1 ON EM1.`event_id` = EV.`ID`
WHERE ( DATEDIFF( '$NowString',repeat_start ) % repeat_interval = 0 )
OR (
(repeat_year = $year OR repeat_year = '*' )
AND
(repeat_month = $month OR repeat_month = '*' )
AND
(repeat_day = $day OR repeat_day = '*' )
AND
(repeat_week = $week OR repeat_week = '*' )
AND
(repeat_weekday = $weekday OR repeat_weekday = '*' )
AND repeat_start <= DATE('$NowString')
)";
foreach ($dbConnect->query($sql) as $row) {
print $row['namn'] . "\t";
print $row['tur'] . "<br />";
}
echo "<br /><br /><br />";
}
解决方法
我会考虑更改这部分代码
// $now = strtotime('11-11-2007'); // remove this line
$start = strtotime('2021-04-01'); // the date you want to start with
$pushToFirst = 0;
for($i = $pushToFirst; $i < $pushToFirst+3; $i++)
{
// $now = strtotime("+".$i." day"); // remove this line
// there are 86400 secs in a day,this will increase the day based on the start date,rather then just taking +$i days from now
$now = $start + ($i * 86400);
编辑
strtotime 假设您正在谈论“现在”,作为默认参考点。因此,如果您说 strtotime("+1 天"),那将是从现在起 1 天,如果您说 strtotime("+5 天"),那将是从现在起 5 天。
有几种方法可以解决这个问题,
- strtotime 可以接受 2 个参数
https://www.php.net/manual/en/function.strtotime.php
strtotime("+1 day",$start),将在参考点使用 $start。 所以 $start + 1day
- $now = $start + ($i * 86400); 这就是我选择使用的,每天有 86400 秒,所以我只是以秒为单位添加天数
两者都有相同的结果,请使用您更易读的任何一种。