我正在构建一个过滤器,以按最小日期和最大日期选择元素。 Formbuilder以YYYY-MM-DD HH-MM-SS格式返回日期,但HH-MM-SS始终等于00-00-00。
但是我希望我的日期上限为YYYY-MM-DD 23-59-59。无论如何,我可以修改我的日期上限吗?
谢谢!
编辑
这是formbuilder代码
->add(
'date_max',
DateType::class,
[
'label' => 'Date max',
'attr' => ['style' => 'width: 1000px'],
'required' => false,
'empty_data' => null
]
);
这是querybuilder代码
if ($datemax !== null) {
$qb->andWhere('q.date_creation >= :date_max')
->setParameter('date_max', $datemax);
我的问题是,我的formbuilder给了我一个看起来像这样的日期类型:
object(DateTime)#43691 (3) { ["date"]=> string(26) "2018-07-25 00:00:00.000000"["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC"}
我希望它像这样:
object(DateTime)#43691 (3) { ["date"]=> string(26) "2018-07-25 23:59:59.000000"["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC"}
这样,当我的sql查询执行时,我可以访问date_max的创建内容。
对不起,我的帖子有点乱(我的英语不好)
答案 0 :(得分:0)
您可以使用DateType对象-> format('Y-m-d')精确指定所需的格式,然后在随后的23:59:59进行串联。
这或多或少是您想要的?
此外,您可以在格式字符串中包含常量,如下所示:
$date = new DateTime('2018/01/01');
// Output year with constant time
echo $date->format('Y-m-d 23:59:59');
答案 1 :(得分:0)
因为谁有时间阅读manuals?
$date_string = "2018-07-31 00:00:00";
$date = new DateTime($date_string);
echo $date->format('Y-m-d H:i:s') . "\n";
// set the time to 1 second before midnight
$date->setTime(23, 59, 59);
echo $date->format('Y-m-d H:i:s') . "\n";
输出:
2018-07-31 00:00:00
2018-07-31 23:59:59
修改
仅注意到您说的时间格式为HH-MM-SS。如果确实如此,那么您将需要以下代码:
$date_string = "2018-07-31 00-00-00";
$date = DateTime::createFromFormat('Y-m-d H-i-s', $date_string);
echo $date->format('Y-m-d H-i-s') . "\n";
$date->setTime(23, 59, 59);
echo $date->format('Y-m-d H-i-s') . "\n";
输出:
2018-07-31 00-00-00
2018-07-31 23-59-59
编辑2
鉴于您已经有一个DateTime对象,您要做的就是设置时间:
var_dump($date);
// set the time to 1 second before midnight
$date->setTime(23, 59, 59);
var_dump($date);
输出:
object(DateTime)#1 (3) {
["date"]=>
string(26) "2018-07-31 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#1 (3) {
["date"]=>
string(26) "2018-07-31 23:59:59.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}