我有一个似乎相对简单的问题,导致了比我想象的更多的问题。您可能知道,HTML5不再支持表单字段的“datetime”输入,只支持“datetime-local”。当我尝试通过我的网站上的表单将“datetime-local”插入我的数据库时,由于“datetime-local”中包含额外的字符,我显然会收到错误。我想要做什么,以及为什么我需要一个日期时间字段而不仅仅是在各自字段中的日期和/或时间是因为我想使用Carbon以不同的格式显示我的日期时间。如何通过HTML表单将日期时间插入到mysql表中,而无需手动将值插入到我的数据库中?
编辑: 以下是我试图实现此目的的所有相关代码。我正在使用Laravel构建此应用程序
游戏/创建形式:
<select name="season_id">
@foreach ($seasons as $season)
<option name="season_id" value="{{ $season->id }}">{{ $season->season }} {{ $season->year }}</option>
@endforeach
</select>
<label for="inputDateTime" class="sr-only">DateTime</label>
<input type="datetime-local" name="gdatetime" id="inputDateTime" class="form-control" placeholder="DateTime" required autofocus>
<label for="inputOpponent" class="sr-only">Opponent</label>
<input type="text" name="opponent" id="inputOpponent" class="form-control" placeholder="Opponent" required autofocus>
<label for="inputLocation" class="sr-only">Location</label>
<input type="text" name="location" id="inputLocation" class="form-control" placeholder="Location" required autofocus>
<label for="inputField" class="sr-only">Field</label>
<input type="text" name="field" id="inputField" class="form-control" placeholder="Field" required autofocus>
游戏控制器:
$game = Game::create(request(['gdatetime', 'opponent', 'location', 'field', 'season_id']));
另外,在我的Game
模型中,我已经定义了这个:
protected $dates = ['gdatetime'];
答案 0 :(得分:1)
您始终可以将日期时间输入解析为碳实例并将其存储在数据库中。解析将解决在存储之前格式化输入所带来的麻烦。然后,您可以在需要时以任何格式显示它们。
$date = \Carbon\Carbon::parse($request->input('datetime'));
修改:根据您的评论和更新,执行此操作。
$data = request(['opponent', 'location', 'field', 'season_id']);
$data['gdatetime'] = \Carbon\Carbon::parse(request('gdatetime'));
$game = Game::create($data);
答案 1 :(得分:0)
使用PHP进行转换。
date('date format here', strtotime($user_input);
始终确保验证用户输入服务器端,否则strtotime()
可能会返回false,导致date()
返回1969。
答案 2 :(得分:0)
或者您可以在模型文件中定义:
protected $dates = ['your_date_field];
当你从数据库中获取它时,它将是一个Carbon实例。