【问题标题】:Is this the proper way to get the end of day in PHP?这是在 PHP 中结束一天的正确方法吗?
【发布时间】:2019-09-22 20:07:59
【问题描述】:

我得到了这样的一天结束:

function endofday($date_to_change)
{
  $date_to_change = date('Y-m-d');
  $date_to_change = date('Y-m-d H:i:s', strtotime("+23 hours 59 minutes  59 seconds", strtotime($date_to_change)));
  return date("Y-m-d H:i:s", $date_to_change);
}

它有效,但这是从约会中获得 23:59:59 的正确和最有效的方法吗?我的目标是从 00:00:00 到 23:59:59 之间的 mysql 数据库中从传入的日期(有或没有时间)中选择行。

【问题讨论】:

标签: php date time format


【解决方案1】:

这可能是另一种解决方案。

$today = new \DateTime('midnight today');
$endOfDay = (new \DateTime('midnight tomorrow'));
var_dump($today < $endOfDay);

var_dump($today->format('Y-m-d H:i:s')); // 2022-02-08 00:00:00
var_dump($endOfDay->format('Y-m-d H:i:s')); // 2022-02-09 00:00:00

【讨论】:

    【解决方案2】:

    如果你不想使用这种 SQL 查询

    where end_date < '2020-09-01' # this date is 1 day after the actual end date
    

    你可以使用DateTime()函数

    $endDate = date_create('2020-08-31')->modify('+1 day -1 microsecond')
    

    【讨论】:

      【解决方案3】:

      为什么不使用date &gt;= start &amp;&amp; date &lt; end

      一般来说,使用包含开头和排他结尾是一种标准的编程方式。否则,您将排除 23:59:59.500。

      此外,如果使用end-start,您总是会得到正确的(时间)差异。

      最后,您可以使用end 作为下一个范围的起点,而无需对其进行调整。

      在我看来,使用独占的最终值/时间只有优势。

      我要打印时间,可以用time-1打印23:59:59,或者time-0.001打印23:59:59.999。无论如何,人们理解until 20:00 的含义就像以前的20:00 一样。

      【讨论】:

      • 是的,你对这个查询部分是正确的......这通常意味着我正在寻找的 php 函数不需要,但我正在使用现有代码,我需要一个函数来调整变量。
      【解决方案4】:

      Можно и так
      $begin = date('Y-m-d 00:00:00');
      $end = date('Y-m-d 23:59:59',strtotime($date_to_change));

      【讨论】:

      • 如果$begin 是在之前计算,$end 在一天更改之后计算,这将不起作用。您必须使用$begin 作为参考时间,例如:$end = $begin + 86399。但是这个解决方案还有另一个问题,在夏令时更改的日子里。
      • @Wimm 用于夏令时,那么您是否建议从第二天开始午夜,然后减去 1 秒(或毫秒)?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多