【问题标题】:Store timestamp with time 00:00:00使用时间 00:00:00 存储时间戳
【发布时间】:2015-02-25 21:45:02
【问题描述】:

我想在数据库中存储一个时间戳,时间组件为00:00:00
以下代码:

$start_date = Carbon::createFromFormat('d-m-Y', $date_interval["start_date"]); 
$end_date = Carbon::createFromFormat('d-m-Y', $date_interval["end_date"]); 

将当前时间添加到日期中,当我仅提供日期而没有时间指定时。
我需要这个,因为之后我需要从数据库中检索内部整数,这应该是一天的开始。

存储这个“一天的开始”的最佳方式是什么?

【问题讨论】:

  • 所以你需要一个真正的0 或像0000-00-00 00:00:00 这样的空日期时间?
  • 我需要一个有yyyy-mm-dd 00:00:00的格式。
  • 为什么不只使用日期字段而不是日期时间/时间戳字段?该字段类型没有时间分量。
  • 你试过了吗:Carbon::createFromFormat('d-m-Y 00:00:00', ..); ;p
  • 还有startOfDay() 方法可用于将日期对象时间重置为00:00:00,再次在文档中按Ctrl-F 帮助您找到它。

标签: php mysql datetime php-carbon


【解决方案1】:

Carbon::createFromFormat() 与其父级不同,缺少的部分设置为当前日期或时间,而不是零。 为了使其表现得像 \DateTime::createFromFormat(),请使用 |! 格式字符,如手册中所述 (https://www.php.net/manual/en/datetime.createfromformat.php)。

示例:

$midnight = Carbon::createFromFormat(
    'Y-m-d|', // or: '!Y-m-d'
    $date
);

【讨论】:

  • 这真的很有用,我从来没有意识到这一点!
【解决方案2】:

为了安全起见,只需让 Carbon 使用 ->endOfDay()->startOfDay() 来决定一天的结束或开始。选择更适合你的。

Carbon::createFromFormat('d-m-Y', $date_interval["start_date"])->endOfDay();
Carbon::createFromFormat('d-m-Y', $date_interval["start_date"])->startOfDay();

【讨论】:

  • @Trace 有什么办法会选择我的答案,因为它更新了?
【解决方案3】:

我通常用电话设置日期,然后用

将时间重置为 00:00
Carbon::setTime(0, 0, 0);  // from the parent, DateTime class

在该类中,还有一个 Carbon::startOfDay() 方法将设置适当的值。

public function startOfDay()
{
    return $this->hour(0)->minute(0)->second(0);
}

【讨论】:

  • 从 v1.24.0 开始,Carbon 库还添加了createMidnightDate($year = null, $month = null, $day = null, $tz = null)
  • 如果我们有一个time 字段,我们可以设置它直接从Carbon 实例调用setTimeFromTimeString
【解决方案4】:

你不应该那样做。

设置你的start_date DATE NULL DEFAULT NULL`

你应该让 MySQL 默认为 NULL 而不是 0000-00-00

【讨论】:

  • 我认为存在误解...我不是在寻找空值,而是时间设置为一天开始的时间戳00-00-00
  • 那么你应该使用 $start_date = strtotime("midnight");
猜你喜欢
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多