我想更新html中的div,每周只用php显示不同的内容,而不使用cron。 如何实现它?以下代码用于在第10天每2个月激活一次代码 但我猜逻辑会有所不同。如果可能的话,一些提示或示例将是伟大的!我很乐意听到你的消息!
// check if current day is 10th and month is an even number
if (date('d')==10 && date('m') % 2 == 0) {
// get todays-date (format: yyyymmdd)
$today = date('Ymd');
// get info about last run
$last_run = variable_get('my_last_run', 0);
// check last run was not today
if ($last_run!=$today) {
// set last run to today
variable_set('my_last_run', $today);
/* Place your code here */
}
}
答案 0 :(得分:2)
我刚刚更新了您的示例,现在它将在下周一开始工作:
$weekInYearNumber = (int)date('W');
$weekDayNumber = (int)date('w');
if ($weekDayNumber === 1 && $weekInYearNumber % 2 == 0) {
// Rest of your code.
}
答案 1 :(得分:0)
如果你不能或不想使用cron作业(这是最简单和推荐的解决方案),你可以创建一个大部分时间都在睡觉的PHP脚本,然后醒来检查日期并运行你需要的任何东西。
如果您不关心约会并且只想每两周运行一次,那么您可以让它像这样睡觉:
sleep(14*24*60*60);
让您的脚本在此之后执行您的代码,并将所有内容置于无限循环中。然后只需从控制台运行脚本,使其没有执行时间限制。
考虑到脚本可能因为不同的原因而停止运行,例如当服务器重新启动时,因此您应该监视该过程并在未运行或重新启动时自动重新运行它。
答案 2 :(得分:0)
为了每周显示不同的内容,您可以使用此
$week = (int)date('W');
$odd = ($week % 2) === 0;
if ($ood) {
// First week.
} else {
// Second week.
}
答案 3 :(得分:0)
如果你想快速做,你可以计算自2018年1月1日以来的几周(因为它是星期一:任何其他一年开始的星期一都没问题),然后检查这个数字是奇数还是偶数:
$diffBetweenNowAndFirstJan2018 = time() - strtotime("2018-01-01");
$numberOfWeeksSinceFirstJan2018 = floor($diffBetweenNowAndFirstJan2018 / (60 * 60 * 24 * 7));
$isNumberOfWeeksOdd = ($numberOfWeeksSinceFirstJan2018 % 2 == 1)
if($isNumberOfWeeksOdd){
// it's other week time
}
在一行中:
if( ( (floor((time() - strtotime("2018-01-01")) / (60 * 60 * 24 * 7))) % 2 == 1) ){
// it's other week time
}
你不应该像弗拉德米尔所说的那样使用日期(' W')因为在新年前夕你可以得到两个"奇怪的"连续一周。
答案 4 :(得分:-1)
这可能适合你。
Sub DOBdateRange()
Dim Bfordate As Date
Dim Afterdate As Date
Bfordate = Worksheets("error").Range("i5").Value
Afterdate = Worksheets("error").Range("j5").Value
Application.ScreenUpdating = False
'çhange data formate to Date
Worksheets("data").Select
Worksheets("data").Range("a2", Range("a" & Rows.count).End(xlUp)).Offset(, 3).Select
Selection.Name = "DOB"
Selection.NumberFormat = "d/mm/yyyy"
'filter and copy how many records match (exclude) date criteria,
Worksheets("Data").Select
Range("bq1").Select
Range(Selection, Selection.End(xlToLeft)).Select
Selection.AutoFilter
ActiveSheet.Range(Selection, Selection.End(xlDown)).AutoFilter _
**Field:=4, _
Criteria1:="<" & Bfordate, _
Operator:=xlOr, _
Criteria2:=">" & Afterdate**
Range("a1").Select
Range("bq1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToLeft)).Select
Selection.Copy Set NewSheet = Sheets.Add(After:=Worksheets("error"))
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
On Error GoTo duplicatesheet3
NewSheet.Name = "DOBdateRange"
On Error GoTo 0
NewSheet.Range("A1").Select
Application.CutCopyMode = False
Worksheets("dobdaterange").Range("d:d").Select
Selection.NumberFormat = "d/mm/yyyy"
Application.CutCopyMode = False
Worksheets("dobdaterange").Range("a1").Select
Range(Selection, Selection.End(xlToRight)).EntireColumn.AutoFit
With ActiveSheet.UsedRange.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Worksheets("Data").Select
Worksheets("Data").Range("A1").Select
Selection.AutoFilter 'Remove auto filter
Sheets("DOBdateRange").Select
Exit Sub
答案 5 :(得分:-1)
您可以应用一个逻辑
只需在数据库中保存下一个cron日期即可。所以你的逻辑会喜欢
<?php
if($databaseDate == date()){
//Perform acetion here
// Save your next date here
}
?>
我希望这能解决你的问题
如果您不想这样做,那么您可以使用PM2
对于pm2,您需要ssh访问服务器。