laravel - 在 Livewire 中显示或编辑日期时使用客户端时区

标签 laravel timezone laravel-livewire alpine.js

我将 Livewire 2AlpineLaravel 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/

相关文章:

javascript - Laravel 错误 : jQuery. 缓动不是函数

html - 在 Laravel Markdown 中嵌入 <canvas> 标签?

php - 如何在 Laravel 中合并两个请求

java - 将 GMT 作为时区而不是 HST 或 PDT

php - 使用 Livewire 在 Laravel Blade 中运行验证时,如何隐藏某些内容?

laravel - 当我在 Laravel livewire 上点击事件时获得 404 模式

带有 paypal 和 stripe 的 Laravel 购物车

java - 时区 CEST 至 GMT

java - 如果时区的日期时间不明确,是否抛出异常?

laravel livewire,如何通过单击将 id 或数据传递给另一个组件