【问题标题】:Use client timezone when displaying or editing dates in Livewire在 Livewire 中显示或编辑日期时使用客户端时区
【发布时间】:2021-03-01 12:51:27
【问题描述】:

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


    【解决方案1】:

    我在这里找到了一些好主意,看看它是否对您有帮助: https://www.qcode.in/managing-users-timezone-in-laravel-app/

    您也可以通过 javascript 或 php 检测访客时区。

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      相关资源
      最近更新 更多