Answers:
需要PHP 5.3才能工作(PHP 5.3中引入了“第一天”)。否则,上面的示例是唯一的方法:
<?php
// First day of this month
$d = new DateTime('first day of this month');
echo $d->format('jS, F Y');
// First day of a specific month
$d = new DateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');
// alternatively...
echo date_create('2010-01-19')
->modify('first day of this month')
->format('jS, F Y');
在PHP 5.4+中,您可以执行以下操作:
<?php
// First day of this month
echo (new DateTime('first day of this month'))->format('jS, F Y');
echo (new DateTime('2010-01-19'))
->modify('first day of this month')
->format('jS, F Y');
如果您更喜欢简洁的方法,并且已经有年份和月份的数值,则可以使用date()
:
<?php
echo date('Y-m-01'); // first day of this month
echo date("$year-$month-01"); // first day of a month chosen by you
->modify()
如果您只想要当前月份的第一天,则不必进行检查。您可以'first day of this month'
直接传递给DateTime构造函数,例如:$date = new DateTime('first day of this month')
。只是说...
这是我用的。
一个月的第一天:
date('Y-m-01');
一个月的最后一天:
date('Y-m-t');
date('Y-m-t');
。
date('w', '2015-05-01');
那么我将以前一天而不是实际的日期结束。(这将给我4而不是正确的5)。
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
这就是您需要的一切:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
strtotime('first day of this month', time())
会在第一天返回,并且时间与当前时间相同。因此,它的第一天不是现在的第一天,而是现在的时间。这样就解决了strtotime('first day of this month 00:00:00', time())
。
目前,我正在使用以下解决方案:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
我遇到的唯一问题是设定了奇怪的时间。我需要为我们的搜索界面设置正确的范围,最终得到了以下结果:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
我使用一种疯狂的方式来执行此操作
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
就这样
丑陋的(并且不使用上面的方法调用),但是可以工作:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
或last day of this month
两者都起作用。但是请记住,$ month必须是一个字符串,其中包含一直到“ Decemember”的月份名称,例如“ January”。或者您可以简单地使用date('Y-m-t');
。
我将其与日常计划工作一起使用,以检查是否应在给定月份的第一天向我的会员发送电子邮件。比其他答案多了几行,但坚如磐石。
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];
//if it's not the first day then stop
if($day != "01") {
echo "error - it's not the first of the month today";
exit;
}
所有那些特殊的php表达式,first day of ...
尽管它们一次又一次地超出了我的头脑,但它们的精神还是很棒的。
因此,我决定构建一些基本的日期时间抽象和大量的特定实现,这些抽象可以由任何IDE自动完成。关键是要找到什么样的东西。就像,today
,now
,the first day of a previous month
,等所有的我列出的那些东西是日期时间。因此,存在一个称为的接口或抽象类ISO8601DateTime
,以及实现它的特定日期时间。
您特定情况下的代码如下所示:
(new TheFirstDayOfThisMonth(new Now()))->value();
有关此方法的更多信息,请查看此条目。