php DateTime,日期没有小时

时间:2016-04-20 11:06:12

标签: php datetime

new \DateTime();
/*
DateTime Object
(
    [date] => 2016-04-20 04:45:24.000000
    [timezone_type] => 3
    [timezone] => UTC
)
*/  

如何调整小时以获取我的DateTime对象:

/*
DateTime Object
(
    [date] => 2016-04-20 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)
*/

我知道的唯一方法是:

$date = new \DateTime();
$date->format('Y-m-d');
$date = new \DateTime($date->format('Y-m-d'));

但我不喜欢这个解决方案。

4 个答案:

答案 0 :(得分:21)

为构造函数设置参数

$d = new \DateTime("midnight");

UPD:如果某个对象已经随时存在

$d->settime(0,0);

结果

DateTime Object
(
    [date] => 2016-04-20 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)

答案 1 :(得分:0)

延长DateTime的舒适度

 class DT extends \DateTime {

  static function __diff($dt1, $dt2 = NULL){
    $a = gettype($dt1) === "string" ? new DateTime($dt1) :$dt1;
    $b = gettype($dt2) === "string" ? new DateTime($dt2) :$dt2 ?? new DateTime();
    return $a->diff($b);
    }

  public function __get($name) { // sql format
    switch ($name) {
        case "date":
            return $this->format("Y-m-d");
        case "time":
            return $this->format("H:i:s");
        case "datetime":
            return $this->date." ".$this->time;
        default:
            return $this->$name;
      }
  }

  public function days2($date){
    $to = gettype($date) === "string" ? new \DateTime($date):$date;
    return (int)$this->__diff($this->date,$to)->format('%R%a'); 
  }
}

如此

$d=new DT(); echo $d->date; echo $d->days2('2018-10-21')

答案 2 :(得分:0)

不幸的是,PHP没有本机类来处理没有时间的日期。 由于Doctrine和许多其他库无论如何都可以与DateTime一起使用,因此我发现的最佳方法就是使用助手类创建时间设置为0的DateTime对象。

class DateFactory
{
    public static function createOnlyDateFromFormat(string $format, string $value): \DateTime
    {
        $date = \DateTime::createFromFormat($format, $value);
        $date->setTime(0, 0, 0);

        return $date;
    }
}

答案 3 :(得分:0)

对于那些喜欢以最短的方式做事的人来说,这里是单行,用于获取当前日期或将字符串日期解析为DateTime对象,并同时设置小时,分钟和秒到0。

今天的日期:

$dateObj = new DateTime ("today");

在特定日期:

$dateObj = new DateTime ("2019-02-12"); //time part will be 0

用于解析特定的日期格式:

$dateObj = DateTime::createFromFormat ('!Y-m-d', '2019-02-12'); //notice the !