jpmurray/laravel-countdown

提供一种简单的方法来获取两个日期之间的时间差,并为eloquent提供额外的奖励特质。

3.0.0 2020-11-08 19:24 UTC

This package is auto-updated.

Last update: 2024-09-08 03:36:26 UTC


README

Scrutinizer Code Quality Build Status

jpmurray/laravel-countdown 是一种简单获取两个日期之间时间差的方法,并为eloquent提供额外的奖励特质。

我需要获取时间差,虽然非常优秀的 Carbon 提供了在不同时间单位(小时、分钟等)中检索时间差的帮助器,但没有一种方法可以一次性计算所有的差异。Carbon 的 diffForHumans 很接近,但无法控制其显示的信息以及显示的内容。

安装

您可以通过 composer 安装此包。

$ composer require jpmurray/laravel-countdown

Laravel <= 5.5 的用法

您应该使用此包的版本 <= 3.0.0。

如果您使用的是不支持包自动发现的 Laravel 版本,您需要将服务提供者和外观添加到您的 config/app.php 文件中。

编辑文件:config/app.php

'providers' => [
    // ...
    jpmurray\LaravelCountdown\CountdownServiceProvider::class,
    // ...
];

// ...

'aliases' => [
    // ...
    'Countdown' => jpmurray\LaravelCountdown\Facades\CountdownFacade::class,
    // ...
];

用法

use jpmurray\LaravelCountdown\Countdown;

// To get time from 5 years ago until now, you can do the following.
// Note that you can send a string to the from and to methods, we will
// try to parse it with Carbon behind the scene
$now = Carbon::now();

$countdown = Countdown::from($now->copy()->subYears(5))
                        ->to($now)->get();

// The above will return the Countdown class where you can access the following values.
// Those mean that from 5 years ago to now, there is 5 years, 1 week, 1 day, 2 hours 15 minutes and 23 seconds

$countdown->years; // 5
$countdown->weeks; // 1
$countdown->days; // 1
$countdown->hours; // 2
$countdown->minutes; // 15
$countdown->seconds; // 23

// It will of course, also work in reverse order of time.
// This will get the time between now and some future date
$countdown = Countdown::from($now)
             ->to($now->copy()->addYears(5))
             ->get();

// To return to humans string
$countdown->toHuman(); // 18 years, 33 weeks, 2 days, 18 hours, 4 minutes and 35 seconds

// You to can pass custom string to parse in method toHuman, like this:
$countdown->toHuman('{days} days, {hours} hours and {minutes} minutes'); // 2 days, 18 hours, 4 minutes

Eloquent 特质

// For convenience, we provide a trait that you can add to any model in your Laravel app that provides
// quick methods to get the values of time between dates. For example:

use jpmurray\LaravelCountdown\Traits\CalculateTimeDiff;

class User extends Authenticatable
{
    use Notifiable, CalculateTimeDiff;
    //...
}

使用特质的示例

// This enables the following:
// You should have casted your attributes to dates beforehand
$user = User::find(1);
$user->elapsed('trial_ends_at'); // get the time elapsed between the date in attribute trial_ends_at to now
$user->until('trial_ends_at'); // get the time from now until the date in attribute trial_ends_at

测试

composer run test

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。