我们基本上有一个日期格式,例如:“ d / m / y”。例如-> '20 / 02/2019',作为字符串。
我们需要能够获取今天的日期和今天的日期+ 15天。然后检查开始时指定的日期是否在这两天之间。
给出日期X。检查日期X是否大于今天的日期A和+15天的日期B。
我们希望获取所有类型为DateTime的值,并能够比较给出的日期是否在它们之间。
我们已经检查了几个不同的问题,但我认为我无法完成它,因为据我所知,我没有正确使用 php函数strtotime 。< / p>
我们已经检查了所有这些问题:
PHP date time greater than today
A non well formed numeric value encountered
PHP date compare older than 15 days
和其他页面,非常有用:
https://benholland.me/tutorials/2012/03/11/adding-and-subtracting-dates-and-times-in-php.html
但是,这些值仍然是错误的。
$date = $item->getData('attribute_name'); //Value as String
$data = date_create(date('d/m/Y',strtotime($date))); //Creating the DateTime object.
但这会自动给我们:
object(DateTime)#5793 (3) { ["date"]=> string(26) "1970-01-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Madrid" }
我认为这一定是某种格式错误,总是会自动为我提供该日期。
我也尝试过最后一个问题:
$date = $item->getData('attribute_name'); //Value as String
$userDate = DateTime::createFromFormat('d/m/Y', $date);
if ($userDate === false) {
throw new InvalidArgumentException('Invalid date string');
}
$cmp = new DateTime('+15 days'); //today's date +15
if ($userDate <= $cmp) {
$userDate = new DateTime();
}
echo date_format($userDate, 'd/m/Y');
我想念什么?有改进的方法吗?
谢谢
答案 0 :(得分:1)
依赖于像date_create这样的PHP魔术,其行为可能与预期不同。 https://secure.php.net/manual/en/function.date-create.php-阅读第二条评论。由于您使用的是dd / mm / YYYY格式,因此可能无法正常工作。
在第二个示例中,您正在使用。
$date = $item->getData('attribute_name'); //Value as String
$userDate = DateTime::createFromFormat('d/m/Y', $date);`
但是您问题的第一行以
开头'd-m-y'。示例-> '20 -02-2019',作为字符串。
根据您输入的示例日期(d-m-Y),您的createFromFormat并不是'd / m / Y'。
答案 1 :(得分:1)
劳尔。
如果要在日期中添加天数,则应在字符串上 进行操作,然后将其转换为DateTime:
如果我做对了,您有3个约会:
$item->getData('attribute_name');
的字符串 $userDate = DateTime::createFromFormat('d/m/Y', $date);
的日期为 DateTime 在将字符串转换为DateTime对象(在$data = date_create(date('d/m/Y',strtotime($date)));
中)之前,应计算“ + 15天”日期。
这是我要怎么做:
$datestring = '05/02/2019';
$date = date_create(date('d/m/Y',strtotime($datestring))); //first date
$userDate = DateTime::createFromFormat('d/m/Y', '22/02/2019'); //user date
if ($userDate === false) {
throw new InvalidArgumentException('Invalid date string');
}
$cmp = DateTime::createFromFormat('d/m/Y',date('d/m/Y', strtotime($date->format('Y/m/d').' + 15 days'))); //first date +15 days
if ($userDate <= $cmp && $userDate >= $date) {
$result = "The user date is in range";
}
else {
$result = "The user date is out of range";
}
echo('<b>First date: </b>'.$date->format('d/m/Y'));
echo('<br> <b>User date : </b>'.$userDate->format('d/m/Y'));
echo('<br> <b>Date + 15 : </b>'.$cmp->format('d/m/Y'));
echo('<br><br>'.$result);
此外,“ + 15天”串联仅对 Y / m / d 格式有效。这就是为什么我将其格式化以进行计算。
在我的示例中,我比较了$ userDate来检查它是否位于其他两个之间,但是您可以根据需要进行比较。
希望有帮助