logo

日期字段

Nova 提供两种类型的日期字段:DateDateTime。正如你可能猜到的那样,Date 字段不存储时间信息,而 DateTime 字段存储

php
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Fields\DateTime;

Date::make('Birthday'),
DateTime::make('Created At'),

选项

步骤

默认情况下,Nova 会为 Date 字段设置最小“步长”为 1 天,为 DateTime 字段设置最小“步长”为 1 秒。你可以通过向字段的 step 方法提供一个整数或 Carbon\CarbonInterval 来修改这两个字段的“步长”值

php
use Carbon\CarbonInterval;

Date::make('Expired On')->step(7),
Date::make('Expired On')->step(CarbonInterval::weeks(1)),

DateTime::make('Published At')->step(60),
DateTime::make('Published At')->step(CarbonInterval::minutes(1)),

最小值和最大值

有时你可能希望明确定义 DateDateTime 字段的最小值和最大值。这可以通过将一个有效的日期表达式、strtotime 支持的日期格式或 Carbon\CarbonInterface 的一个实例传递给这些字段的 minmax 方法来实现

php
use Carbon\Carbon;

Date::make('Expired On')
    ->min('tomorrow')
    ->max('next week'),

Date::make('Expired On')
    ->min(Carbon::tomorrow())
    ->max(Carbon::today()->addWeek(1)),

时区

默认情况下,Nova 用户将始终看到以应用程序的“服务器端”时区显示的日期,该时区由应用程序的 config/app.php 配置文件中的 timezone 配置选项定义。

自定义时区

有时你可能希望明确定义 Nova 用户的时区,而不是使用应用程序的时区配置。例如,你的应用程序可能允许用户选择自己的时区,以便即使在世界各地旅行时,他们也能始终看到一致的日期时区。

要实现这一点,你可以使用 Nova::userTimezone 方法。通常,你应该在应用程序的 NovaServiceProviderboot 方法中调用此方法

php
use Laravel\Nova\Nova;
use Illuminate\Http\Request;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::userTimezone(function (Request $request) {
        return $request->user()?->timezone;
    });
}