【发布时间】:2021-03-01 12:51:27
【问题描述】:
我将 Livewire 2 和 Alpine 与 Laravel 8 一起使用。
我有一个 HTML 表格,其中显示了模型列表的一些信息,这些信息中有日期。
日期存储在我的数据库中没有时区的时间戳中(作为 UTC),我的 Laravel 默认配置为使用 UTC。
我需要在客户端本地时区中显示这些日期,但 HTML 表会显示给用户而无需登录,因此我无法将他们的 timezone 存储在 users 表中例子..
我的桌子是这样的:
<table>
<thead>
<tr>
<th>actions</th>
<th>id</th>
<th>name</th>
<th>start date</th>
</tr>
</thead>
<tbody>
@foreach ($mymodels as $m)
<tr>
<td><button wire:click="startEdit({{ $m->id }})">EDIT</button></td>
<td>{{ $m->id }}</td>
<td>{{ $m->name }}</td>
<td>{{ $m->starts_at }}</td> {-- I need to display this in local timezone --}
</tr>
@endforeach
</tbody>
</table>
我不知道这样做的好方法是什么。
在显示之前告诉 Livewire 时区偏移量是多少?但是怎么做呢?
我正在考虑在我的组件内的随机 div 上在 Alpine 中做这样的事情:
x-data x-init="$wire.set('timezone', -(new Date).getTimezoneOffset())"
但我觉得不好看..
这只是问题的第一部分,因为正如您在我的表格中看到的那样,有一个 编辑 按钮,它会打开一个带有编辑表单的模式。在这种形式中,我希望用户在其本地时区中输入日期,因此我需要将其转换为其时区,然后再将其分配给 wire:model,并且我需要在将其保存到数据库之前将其转换回 UTC。
我在互联网上没有找到关于如何处理这种事情的任何好的做法,任何想法将不胜感激。
【问题讨论】:
标签: laravel timezone laravel-livewire alpine.js