【问题标题】:What format does the default timestamps (create_at and updated_at) in laravel have when saved to db?laravel 中的默认时间戳(created_at 和 updated_at)保存到 db 的格式是什么?
【发布时间】:2020-06-07 07:09:44
【问题描述】:

我即将为 db 保存一个额外的时间戳:last_sent

我想以与默认时间戳(created_at 和 updated_at)相同的方式保存它 - 这意味着我将像这样迁移它:

$table->timestamp('last_sent')->nullable (有时它会为空..)

我的问题是我应该将时间值以什么格式保存到此列?

我找到了两个选项,但不确定哪个是正确的:

Carbon\Carbon::now()->toDateTimeString();

或者只是

Carbon\Carbon::now();

保存日期和时间以使其像默认时间戳一样的正确方法是什么?

【问题讨论】:

  • 您能举例说明created_atupdated_at 的外观吗?
  • 这是laravel默认的时间戳,会在post中清除!
  • 当然可以,但我可能会帮助你,除了我不使用 laravel。 Laravel 在这里并不重要,重要的是数据的样子。如果它是像 1591514175 这样的原始数字,那么我可以告诉你它只是一个时间戳,所以 PHP 的原生 time() 函数就足够了。

标签: php laravel php-carbon


【解决方案1】:

我认为这是Mysql的问题...

根据mysqltutorial

MySQL TIMESTAMP 是一种时间数据类型,它包含日期和时间的组合。 TIMESTAMP 的格式为 YYYY-MM-DD HH:MM:SS,固定为 19 个字符。

所以,默认是 YYYY-MM-DD HH:MM:SS

这就是时间戳存储在数据库中的方式......

如果你发现 $table->timestamps();这样做:

public function timestamps($precision = 0)
{
    $this->timestamp('created_at', $precision)->nullable();

    $this->timestamp('updated_at', $precision)->nullable();
}

so: laravel 默认保持 Mysql 格式,precision=0 如果你想像默认 laravel 时间戳一样存储你的列,你可以:

$this->timestamp('last_sent',0)->nullable();

你可以忽略第二个参数

对于您的列的值:

Carbon\Carbon::now()->toDateTimeString(); 

这不会这样做,因为它是简单的字符串而不是日期

但这已经足够了:

$value=Carbon\Carbon::now();

尽管 $value 将在毫秒内保存四个数字,但由于我们迁移中的(0 精度),这些数字将在 db 中被忽略...

【讨论】:

  • 感谢您的回答。你是正确的Carbon\Carbon::now(); 是使用的那个
【解决方案2】:

通常采用 YYYY-MM-DD Hour:Min:Sec 格式。为了让你清楚,我将为此添加一个屏幕截图。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2014-08-17
    • 2016-08-28
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2015-09-16
    • 2016-08-09
    • 2013-10-05
    相关资源
    最近更新 更多