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'));
但我不喜欢这个解决方案。
答案 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 !