我试图使用下面的代码获取当前星期星期四的日期
date('m/d/y',strtotime('thursday this week'));
如上所述,我如何在 php 中获取当前月份的所有星期四日期。
建议使用 PHP 5.3.0 附带的改进的日期和时间功能。即DatePeriod
和DateInterval
类。
<?php
$start = new DateTime('first thursday of this month');
$end = new DateTime('first day of next month');
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval , $end);
foreach ($period as $date) {
echo $date->format('c') . PHP_EOL;
}
编辑
可以通过多种方式完成更复杂的过滤,但这里有一个简单的方法来显示每月的每个星期二和星期四。
...
$interval = new DateInterval('P1D');
...
foreach ($period as $date) {
if (in_array($date->format('D'), array('Tue', 'Thu'), TRUE)) {
echo $date->format('c') . PHP_EOL;
}
}
您可以像这样过滤日期:
$sDay = 'Thursday';
$rgTime = array_filter(
range(strtotime('first day of this month'), strtotime('last day of this month'), 3600*24),
function($iTime) use ($sDay)
{
return date('l', $iTime) == $sDay;
});
另一种获取$rgTime
方式是:
$rgNums = ['first', 'second', 'third', 'fourth', 'fifth'];
$rgTime = [];
$sDay = 'Thursday';
foreach($rgNums as $sNum)
{
$iTime = strtotime($sNum.' '.$sDay.' of this month');
if(date('m', $iTime)==date('m'))
{
//this check is needed since not all months have 5 specific week days
$rgTime[]=$iTime;
}
}
-现在,如果你想获得特定的格式,比如Y-m-d
,那将是:
$rgTime = array_map(function($x)
{
return date('Y-m-d', $x);
}, $rgTime);
编辑
如果你想有几个工作日,这也很容易。对于第一个样本,它将是:
$rgDays = ['Tuesday', 'Thursday'];
$rgTime = array_filter(
range(strtotime('first day of this month'), strtotime('last day of this month'), 3600*24),
function($iTime) use ($rgDays)
{
return in_array(date('l', $iTime), $rgDays);
});
尝试这个。应该管用 :)
<?
$curMonth = date("m");
$start = strtotime("next Thursday - 42 days");
for ($i=1; $i < 15; $i++){
$week = $i*7;
if (date("m",strtotime("next Thursday - 42 days + $week days")) == $curMonth ){
$monthArr[] = date("m/d/y",strtotime("next Thursday - 42 days + $week days"));
}
}
print_r($monthArr);
?>