今天假设是2011年2月21日(星期一)。这是本月的第三个星期一。如果将日期作为输入,我怎么知道它之前经过了多少个星期一?
在PHP中,如何知道本月有多少星期一过去了?
答案 0 :(得分:4)
$now=time() + 86400;
if (($dow = date('w', $now)) == 0) $dow = 7;
$begin = $now - (86400 * ($dow-1));
echo "Mondays: ".ceil(date('d', $begin) / 7)."<br/>";
对我有用....
编辑:包括今天的星期一
答案 1 :(得分:3)
这听起来像一个非常简单的除法计算。从当前日期开始,减去上一个星期一之后的天数(例如:星期三= -2),除以7和ceil()
将其四舍五入。
编辑:这将包括当前星期一的数字,在星期一21日返回“3”。
答案 2 :(得分:0)
你可以循环一直到现在,并计算星期一:
$firstDate = mktime(0, 0, 0, date("n"), 1, date("Y"));
$now = time();
$mondays = 0;
for ($i = $firstDate; $i < $now; $i = $i + 24*3600) {
if (date("D", $i) == "Mon")
$mondays ++;
}
尚未测试此脚本
答案 3 :(得分:0)
<?php
function mondays_get($month, $stop_if_today = true) {
$timestamp_now = time();
for($a = 1; $a < 32; $a++) {
$day = strlen($a) == 1 ? "0".$a : $a;
$timestamp = strtotime($month . "-$day");
$day_code = date("w", $timestamp);
if($timestamp > $timestamp_now)
break;
if($day_code == 1)
@$mondays++;
}
return $mondays;
}
echo mondays_get('2011-02');
希望这对你有用!我刚推出它。
“注意上面代码中的错误;我只是证明它是正确的,没有尝试过。”
工作正常afaik
答案 4 :(得分:0)
试试这个......
//find the most recent monday (doesn't find today if today is Monday though)
$startDate = strtotime( 'last monday' );
//if 'last monday' was not this month, 0 mondays.
//if 'last monday' was this month, count the weeks
$mondays = date( 'm', $startDate ) != date( 'm' )
? 0
: floor( date( 'd', $startDate ) / 7 );
//increment the count if today is a monday (since strtotime didn't find it)
if ( date( 'w' ) == 1 ) $mondays++;
答案 5 :(得分:0)
另一种方法是找到今天的哪一天,通过一些魔法strtotime()
找到该月的第一天这样的一天,然后在几周内计算它与现在之间的差异。请参阅下面的功能,该功能将采用Y-m-d
格式date()
并返回当月的工作日。
注意:strtotime
需要详细,包括“of”和月份:“2011-02的第一个星期一”,否则advances one day。当我测试边缘情况时,这就是我。
还添加了一些完全可选的显示胡椒,但我觉得这样。
function nthWeekdayOfMonth($day) {
$dayTS = strtotime($day) ;
$dayOfWeekToday = date('l', $dayTS) ;
$firstOfMonth = date('Y-m', $dayTS) . "-01" ;
$firstOfMonthTS = strtotime($firstOfMonth) ;
$firstWhat = date('Y-m-d', strtotime("first $dayOfWeekToday of $monthYear", $firstOfMonthTS)) ;
$firstWhatTS = strtotime($firstWhat) ;
$diffTS = $dayTS - $firstWhatTS ;
$diffWeeks = $diffTS / (86400 * 7);
$nthWeekdayOfMonth = $diffWeeks + 1;
return $nthWeekdayOfMonth ;
}
$day = date('Y-m-d') ;
$nthWeekdayOfMonth = nthWeekdayOfMonth($day) ;
switch ($nthWeekdayOfMonth) {
case 1:
$inflector = "st" ;
break ;
case 2:
$inflector = "nd" ;
break ;
case 3:
$inflector = "rd" ;
break ;
default:
$inflector = "th" ;
}
$dayTS = strtotime($day) ;
$monthName = date('F', $dayTS) ;
$dayOfWeekToday = date('l', $dayTS) ;
echo "Today is the {$nthWeekdayOfMonth}$inflector $dayOfWeekToday in $monthName" ;