我将 Livewire 2 和 Alpine 与 Laravel 8 一起使用。
我有一个 HTML 表格,显示模型列表的一些信息,在这些信息中有日期。
日期存储在我的数据库中没有时区的时间戳中(如 UTC),我的 Laravel 默认配置为使用 UTC。
我需要在客户端本地时区中显示这些日期,但 HTML 表格无需登录即可显示给用户,因此我无法将他们的时区 存储在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在将其保存到数据库之前。
我没有在互联网上找到任何关于如何处理这种事情的好的做法,任何想法将不胜感激。
最佳答案
我在这里发现了一些不错的想法,看看它是否对您有帮助: https://www.qcode.in/managing-users-timezone-in-laravel-app/
您也可以从 javascript 或 php 检测客人时区。
关于laravel - 在 Livewire 中显示或编辑日期时使用客户端时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64889937/