使用碳来知道时间是否落在两个时间点之内

Nir*_*paz 14 php datetime laravel

我正在使用Laravel.我刚刚遇到Carbon供应商文件夹中已有的内容.我做了一些快速搜索,发现它是PHP日期时间的一个很好的扩展.

在我的应用程序的某个地方,我需要一个逻辑来检查给定时间是否落在两个时间点之间.让我们说,我想检查10:00是否落在时间9:55和10:05之间.当然,它会下降,但我应该如何在Carbon的帮助下使用这种逻辑.

默认情况下,Carbon::now()将以2014-12-02 14:37:18格式返回日期和时间.我在想是否只能提取时间部分,14:37:18然后我可以比较两次,以了解测试时间是否属于两个时间点.

如果我直接检查两个Carbon对象,它也会尝试检查年份.但我所需要的只是时间部分.

事实上,我甚至不确定如果时间(h:m:s)可以直接通过碳进行比较.

Kys*_*lik 20

是的,有一种方法可以在Carbon中执行此操作,只需在此处查看文档即可.

要确定当前实例是否在两个其他实例之间,您可以使用恰当命名的between()方法.第三个参数表示是否应该进行等于比较.默认值为true,用于确定其是否在边界之间或等于边界.

$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false));   // bool(false)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我找到了原因:我为`now()`函数更改了`today()`.前者在午夜(2016-05-13 00:00:00`)返回日期,而后者在您查看信息时返回日期(2016-05-13 08:48:36`).参考[此处](http://carbon.nesbot.com/docs/#api-comparison). (3认同)

Dus*_*teD 4

UNIX 时间对于此类任务来说更容易。

因此,您可以使用 strtotime 将您的嬉皮士表示转换为颈胡子表示,并像真正的男人一样进行比较。由于您只想比较时间,因此您可以使用相对时间来解决这个问题。

<?php
$now = time();
$startTime = strtotime( "12:10:24", $now );
$endTime = strtotime( "14:24:45", $now );
$point = strtotime("12:25:40", $now );
if( $point >= $startTime && $point <= $endTime )
{
  echo "Inside\n";
} else {
  echo "Outside\n";
}
?>
Run Code Online (Sandbox Code Playgroud)

输出:

$ php test.php 2> /dev/null
Inside
Run Code Online (Sandbox Code Playgroud)