问题描述
如果我从当前日期开始,如何获得每个月的第一个星期五?
If I start with the current date, how can I get the first Friday of each month?
我当时正在考虑使用$ date-> get(Zend :: WEEKDAY)并将其与星期五进行比较,然后与DAY进行比较,并检查它是否小于或等于7.然后在其上加上1个月.
I was thinking about using $date->get(Zend::WEEKDAY) and comparing that to Friday and then with DAY and checking if it is less than or equal to 7. Then adding 1 month onto it.
肯定有更简单的东西吗?
There must be something simpler?
推荐答案
如何
$firstFridayOfOcober = strtotime('first friday of october');
或将其转换为方便的功能:-
Or turn it into a handy function:-
/**
* Returns a timestamp for the first friday of the given month
* @param string $month
* @return type int
*/
function firstFriday($month)
{
return strtotime("first friday of $month");
}
您可以将其与Zend_Date一起使用,如下所示:-
You could use this with Zend_Date like this:-
$zDate = new Zend_Date();
$zDate->setTimestamp(firstFriday('october'));
然后Zend_Debug::dump($zDate->toString());
将产生:-
string '7 Oct 2011 00:00:00' (length=19)
我想这要简单得多:)
经过进一步思考后进行
更通用的功能可能对您更有用,所以我建议使用此功能:-
A more generalised function may be of more use to you, so I'd suggest using this:-
/**
* Returns a Zend_Date object set to the first occurence
* of $day in the given $month.
* @param string $day
* @param string $month
* @param optional mixed $year can be int or string
* @return type Zend_Date
*/
function firstDay($day, $month, $year = null)
{
$zDate = new Zend_Date();
$zDate->setTimestamp(strtotime("first $day of $month $year"));
return $zDate;
}
这几天,我首选的方法是扩展PHP的 DateTime对象:-
These days my preferred method is to extend PHP's DateTime object:-
class MyDateTime extends DateTime
{
/**
* Returns a MyDateTime object set to 00:00 hours on the first day of the month
*
* @param string $day Name of day
* @param mixed $month Month number or name optional defaults to current month
* @param mixed $year optional defaults to current year
*
* @return MyDateTime set to last day of month
*/
public function firstDayOfMonth($day, $month = null, $year = null)
{
$timestr = "first $day";
if(!$month) $month = $this->format('M');
$timestr .= " of $month $year";
$this->setTimestamp(strtotime($timestr));
$this->setTime(0, 0, 0);
var_dump($this);
}
}
$dateTime = new MyDateTime();
$dateTime->firstDayOfMonth('Sun', 'Jul', 2011);
赠予:-
object(MyDateTime)[36]
public 'date' => string '2011-07-03 00:00:00' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
这篇关于每个月的第一天的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!