【问题标题】:Laravel show different date from my databaseLaravel 显示与我的数据库不同的日期
【发布时间】:2017-07-07 23:19:37
【问题描述】:

我的项目有问题。当我在我的数据库中存储值时,它工作得非常好。但是当我想显示该值时,它会给我一个未定义的日期,该日期未存储在我的数据库中。

在我的数据库中,created_at 字段值为 2017-02-18 16:23:37。但是当我想在我的视图页面中显示这个时,它给了我这个

它给了我 2017-02-02 09:19:40 的值。我不明白怎么了。 我只显示 created_at 字段。请帮帮我

我的控制器是

public function showApplication() {
        $dataList = ApplicationModelOL::leftJoin('certificate', 'application.application_certificate_id', 'certificate.certificate_track_id')
                ->where('application_users_id', Auth::User()->users_track_id)
                ->get();
        return view('frontend.pages.application', compact('dataList'));
    }

我的看法是

@foreach($dataList as $data)
<tr>
    <td>{{ $data->certificate_name_en }}</td>
    @if($data->application_delivery_mode == 195126)
    <td>Self</td>
    @else 
    <td>Via Post</td>
    @endif
    <td class="hidden-phone">{{ $data->created_at }}</td>
    <td class="hidden-phone">
        <span class="label label label-warning">Pending</span>
    </td>
    <td class="hidden-phone">
        <span class="label label-primary"><i class="fa fa-edit"></i></span>&nbsp;
        <span class="label label-danger"><i class="fa fa-trash"></i></span>
    </td>
</tr>
@endforeach

【问题讨论】:

  • 请显示所有相关代码。
  • 即使我们don't understand whats wrong,直到你分享所有相关代码
  • 我认为你弄错了users_track_id,因为Auth::User() 总是从登录用户那里获取数据,而不是从向你发送应用程序的用户那里获取数据。通过将get() 方法替换为toSql() 方法和echo $dataList 来打印您的查询
  • 通过toSql()获取您的查询并尝试直接在phpmyadmin中运行
  • 您正在进行联接,您确定在另一个表中没有具有该值的created_at-列吗?

标签: php mysql laravel date laravel-5.3


【解决方案1】:

当您的 MySQL 时区与框架中设置的 php 时区不同时,就会出现此问题。 要同步您的时区,您可以使用以下代码:

PHP:

date_default_timezone_set('Asia/Tehran');

MySQL:

$timeZone = (new DateTime('now', new DateTimeZone('Asia/Tehran')))->format('P');
$pdo->exec("SET time_zone='$timeZone';");

【讨论】:

  • 这真的能解释 16 个 的差异吗?
  • 我将时区更改为亚洲/达卡。如果我将时区更改为 UTC,这个问题仍然存在。 @mmta41
  • 我认为这不能解释秒差。
  • 尝试将新行插入数据库并再次检查该字段! ps:一旦我在迁移到新服务器时遇到同样的问题,我将 mysql 数据库导出到 sql 文件中,当导入时,所有 DateTime 字段都会跳回两天。
【解决方案2】:

使用 Mysql 属性,如果你在表上使用连接,你可以获得不同的值,无论是 id 还是 created_at(Laravel)。假设您加入三个表,输出将返回三个“created_at”的最后一列。因此,您可以检查以确保您的联接正确。

【讨论】:

    【解决方案3】:

    您可以在 config/app.php 中更改 Laravel 中的时区。

    下面的参数可以根据supported timezones...更改为您的偏好。

    'timezone' => 'Europe/Dublin',
    

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2011-04-18
      • 2022-09-30
      • 1970-01-01
      • 2016-12-19
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      相关资源
      最近更新 更多