【问题标题】:Adding hour string to Datetime PHP将小时字符串添加到 Datetime PHP
【发布时间】:2016-10-22 06:57:54
【问题描述】:

我正在使用 Laravel 构建一个应用程序。

我让我的用户使用输入在表单中选择日期和时间。我将两者都保存在数据库的两个不同字段中。

日期字段保存为:2016-06-20 时间字段保存为:17:30:00

现在我想将这两者结合起来,并将它们保存到我的数据库中,如下所示:2016-06-20 17:30:00,以便我可以对其执行一些逻辑。

由于我使用的是 Laravel,我认为使用 Carbon 可以做到这一点,但在阅读了几次文档后,我似乎找不到将这两者结合起来的方法。

【问题讨论】:

  • 如果您使用的是mysql,那么为什么不使用datetime 输入数据库?

标签: php laravel date datetime time


【解决方案1】:

试试这个:

$date = '2016-06-20';
$time = '17:30:00';
$combinedDateTime = $date . ' ' . $time;
$time = date("m/d/Y h:i:s A T", strtotime($combinedDateTime));
$time =  new \DateTime($time);

如果你print_r($time),它会显示一个 DateTime 对象:

DateTime Object ( [date] => 2016-06-20 17:30:00.000000 [timezone_type] => 3 [timezone] => UTC )

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你可以用两个数据创建一个字符串,然后转换为字符串的日期

    $datetime = $date." ".$time;
    $datetime = date('Y-m-d H:i:s', strtotime($datetime));
    

    现在您可以将此变量插入到数据库的日期时间字段中

    【讨论】:

    • 好的,我可能需要更新我原来的问题,但情况是这样的。我以字符串格式从表单中收到日期。我需要将其转换为 DateTime 或 Carbon,这样我就可以在 while 循环中使用 modify() 或 addDay() 来在每次循环迭代时添加一天。每次循环更新日期时,我都需要将这个新日期保存在我的数据库中,同时在其后面添加时间字段
    • 试试这个:while(condition){ dateadd($datetime, date_interval_create_from_date_string('1 days');) }
    【解决方案3】:

    您的意思是将两者合并到数据库中的单个字段中吗?如果是这样,你不需要任何特殊的接口:

    mysql> create table d (dt datetime, d date, t time);
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> insert into d (d, t) values ('2016-06-20', '17:30:00');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from d;
    +------+------------+----------+
    | dt   | d          | t        |
    +------+------------+----------+
    | NULL | 2016-06-20 | 17:30:00 |
    +------+------------+----------+
    1 row in set (0.00 sec)
    mysql> update d set dt = concat(d, ' ',  t);
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from d;
    +---------------------+------------+----------+
    | dt                  | d          | t        |
    +---------------------+------------+----------+
    | 2016-06-20 17:30:00 | 2016-06-20 | 17:30:00 |
    +---------------------+------------+----------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 这个解决方案看起来非常好,即使我更喜欢在 PHP 中执行逻辑而不是查询。我不得不承认我不确定如何在 Laravel 中做到这一点
    【解决方案4】:

    使用 carbon 代替 php 的 Datetime。 click here 用于碳文件。

    【讨论】:

      【解决方案5】:

      您还可以将日期和时间与其他 DateTime/Carbon 对象分开设置

      $source1 = new Carbon('2010-05-16 22:40:10.1');
      $dt = new Carbon('2001-01-01 01:01:01.2');
      $dt->setTimeFrom($source1);
      
      # echo $dt; // 2001-01-01 22:40:10
      

      或使用setTimeFromTimeString 方法设置时间(字符串格式)。

      $date = new Carbon('2010-05-16');
      $date->setTimeFromTimeString('22:32')
      
      # echo $date; // 2010-05-16 22:32:00
      

      更多详情请见Carbon Docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        • 2015-10-21
        • 1970-01-01
        • 2013-05-23
        • 2011-04-03
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多