Php 年或年/月的第一个和最后一个日期时间
我有一个接受一年和一个可选月份的操作。我需要查询在该时间内写的所有文章,因此我需要该时间跨度的绝对第一个和最后一个有效日期时间Php 年或年/月的第一个和最后一个日期时间,php,datetime,Php,Datetime,我有一个接受一年和一个可选月份的操作。我需要查询在该时间内写的所有文章,因此我需要该时间跨度的绝对第一个和最后一个有效日期时间 $start = new \DateTime(); $start->setDate((int) $year, (int) ($month ?: 1), 1); $start->setTime(0, 0); $end = clone $start; $end->add(new \DateInterval($mon
$start = new \DateTime();
$start->setDate((int) $year, (int) ($month ?: 1), 1);
$start->setTime(0, 0);
$end = clone $start;
$end->add(new \DateInterval($month ? 'P1M' : 'P1Y'));
$end->sub(new \DateInterval('PT1S'));
有没有更干净的方法来写这个
$start = mktime(0, 0, 0, $month ?: 1, 1, $year);
$end = mktime(23, 59, 59, $month ?: 12, $month ? date('t', $start) : 31, $year);
或
不确定是否考虑这种清洁剂,但它较短,没有相关计算。
写这篇文章最干净、最容易理解的方式可能是:
if ($month) {
$start = new \DateTime("$year-$month-1 00:00:00");
$end = new \DateTime("$year-$month-" . $start->format('t') . ' 23:59:59');
} else {
$start = new \DateTime("$year-1-1 00:00:00");
$end = new \DateTime("$year-12-31 23:59:59");
}
如果要将此值用作SQL查询的值,您可能不需要在这里过多地涉及DateTime
或
不确定是否考虑这种清洁剂,但它较短,没有相关计算。
写这篇文章最干净、最容易理解的方式可能是:
if ($month) {
$start = new \DateTime("$year-$month-1 00:00:00");
$end = new \DateTime("$year-$month-" . $start->format('t') . ' 23:59:59');
} else {
$start = new \DateTime("$year-1-1 00:00:00");
$end = new \DateTime("$year-12-31 23:59:59");
}
如果要将此值用作SQL查询的值,您可能根本不需要在此处涉及
DateTime
。为什么不查询该时间跨度内的所有文章,按文章撰写日期升序或降序(最新或最旧)排序,并将1限制为仅获取最早或最新的一篇。您可能不需要从所需的行中分别查找日期时间。现在,您可以在文件的开头添加一个use DateTime
,而不是在\DateTime
中始终使用反斜杠(我想这是因为您使用的是名称空间)。然后可以省略反斜杠。为什么不查询该时间跨度内的所有文章,按文章撰写日期升序或降序(最新或最旧),并将1限制为仅获取最早或最新的一篇。您可能不需要从所需的行中分别查找日期时间。现在,您可以在文件的开头添加一个use DateTime
,而不是在\DateTime
中始终使用反斜杠(我想这是因为您使用的是名称空间)。然后可以省略反斜杠。