在laravel 5.5中使用碳来比较2个日期

时间:2017-12-04 08:55:13

标签: php laravel datetime php-carbon

在laravel 5.5中,我使用碳来比较2个日期,但问题是createFromFormat返回时间戳,我不知道

如何将时间设置为“00:00:00”。我做了:

echo 'passes <pre>$value::'.print_r($value, true).'</pre>';
// output 2018-08-01

$postgresql_format = config('app.postgresql_date_format', 'Y-m-d');

echo '<pre>$postgresql_format::'.print_r($postgresql_format,true).'</pre>';
// output $postgresql_format::Y-m-d

$A = preg_split("/ /", $value);
if (count($A) == 2) {
    $value= $A[0];
}

$a= Carbon::createFromFormat($postgresql_format, $value);

echo '<pre>$a->isPast()::'.print_r($a->isPast(),true).'</pre>';
//output $a->isPast():: - seems it is does not work

$today= Carbon::today();
echo '<pre>$today::'.print_r($today,true).'</pre>';
/* Output:
$today::Carbon\Carbon Object
(
    [date] => 2017-12-04 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)
 */

var_dump($today->lt($a)); // bool(false)
echo '<pre>$a::'.print_r($a,true).'</pre>';

/* 
$a::Carbon\Carbon Object
(
    [date] => 2018-08-01 08:41:56.000000
    [timezone_type] => 3
    [timezone] => UTC
)
 */

如何设置$a“00:00:00”的时间以排除比较时间?

PS:$a->isPast()似乎不起作用

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过这样使用来解决它。

Carbon::parse('2018-08-01 08:41:56.000000')->format('Y/m/d');

进一步的参考是herehere

对于比较你可以这样做

    $date = Carbon::parse('2016-09-17 11:00:00');
    $now = Carbon::now();

    $diff = $date->diffInDays($now);

答案 1 :(得分:0)

如果我理解正确,您希望仅根据日期比较两个日期,不包括时间。

Carbon有一种方法可以根据日期将其与另一个Carbon对象进行比较,不包括时间。

来自Carbon源代码:

public function isSameDay(Carbon $dt)
    {
        return $this->toDateString() === $dt->toDateString();
    }

toDateString将日期格式化为&#34; Y-m-d&#34;。

所以你可以这样做:

$date = Carbon::parse('2016-09-17 11:00:00');
$now = Carbon::now();

if ($date->isSameDay($now) ...

或者,如果你今天只需要检查一下:

if ($date->isToday() ...

有关详情,请参阅here