我有一个日历,我希望允许在一个月的某一天重复事件。一些例子是:
我需要的是能够找出到目前为止本月过了多少个工作日(例如星期二)。
I found some code返回星期一过去的数量。
$now=time() + 86400;
if (($dow = date('w', $now)) == 0) $dow = 7;
$begin = $now - (86400 * ($dow-1));
echo "Mondays: ".ceil(date('d', $begin) / 7)."<br/>";
这很有效,但我怎样才能确定任何工作日?我似乎无法理解代码来完成这项工作。
答案 0 :(得分:1)
strtotime对这类事情非常有用。 Here are lists of the supported syntax。使用您每个月的第二个星期五重复的示例,我为您编写了以下简单代码:
<?php
$noOfMonthsFromNow=12;
$dayCondition="Second Friday of";
$months = array();
$years = array();
$currentMonth = (int)date('m');
for($i = $currentMonth; $i < $currentMonth+$noOfMonthsFromNow; $i++) {
$months[] = date('F', mktime(0, 0, 0, $i, 1));
$years[] = date('Y', mktime(0, 0, 0, $i, 1));
}
for ($i=0;$i<count($months);$i++){
$d = date_create($dayCondition.' '.$months[$i].' '.$years[$i]);
if($d instanceof DateTime) echo $d->format('l F d Y H:i:s').'<br>';
}
?>
进行测试
答案 1 :(得分:0)
$beginningOfMonth = strtotime(date('Y-m-01')); // this will give you the timestamp of the beginning of the month
$numTuesdaysPassed = 0;
for ($i = 0; $i <= date('d'); $i ++) { // 'd' == current day of month might need to change to = from <= depending on your needs
if (date('w', $beginningOfMonth + 3600 * $i) == 2) $numTuesdaysPassed ++; // 3600 being seconds in a day, 2 being tuesday from the 'w' (sunday == 0)
}
不确定这是否有效,并且可能有更好的方法;没有办法立即测试它,但希望这会让你走上正轨! (我的日期数学也被绊倒了,尤其是时区)