我有这个问题:我必须添加一些日期来自包含数组中日期值的变量的日期。我已经按照这里找到的许多指南,但它给了我一个奇怪的行为。当我导出由所有代码处理产生的.csv文件时,我们可以意识到日期处理不正确,尽管我使用了正确的PHP命令,似乎将所需的数字添加到月份,而不是导致.csv的结果不正确。怎么会这样?
我要粘贴下面的代码:
// === data
$newDateAdd = date("d/m/Y", strtotime($readyForExport['date_add']));
$readyForExport['date_add'] = $newDateAdd;
// aggiungo 21 giorni - 3 settimane - alla data di acquisto
$date_mod = date_create($newDateAdd);
date_add($date_mod,date_interval_create_from_date_string("2 days"));
$readyForExport['delivery_date'] = date_format($date_mod,"d/m/Y");
我还上传了一个屏幕截图,我们可以看到在.csv中添加了几个月而不是几天......
非常感谢。
您应该使用DateTime对象。 首先,它是面向对象的,这是首选的。 据我所知,它还有更精细的操作代码。
$newDateAdd = new DateTime($readyForExport['date_add']);
$readyForExport['date_add'] = $newDateAdd->format('d/m/Y');
// aggiungo 21 giorni - 3 settimane - alla data di acquisto
$date_mod = clone $newDateAdd;
$date_mod->add(new DateInterval('P2D'));
$readyForExport['delivery_date'] = $date_mod->format('d/m/Y');
我认为问题是DateTime构造函数期望数据为m / d / Y.
最好直接使用strtotime的结果:
$utime = strtotime($readyForExport['date_add']);
$newDateAdd = date("d/m/Y", $utime);
$readyForExport['date_add'] = $newDateAdd;
// aggiungo 21 giorni - 3 settimane - alla data di acquisto
$date_mod = date_create('now')->setTimestamp($utime);
date_add($date_mod,date_interval_create_from_date_string("2 days"));
$readyForExport['delivery_date'] = date_format($date_mod,"d/m/Y");
您遇到的问题与strtotime($readyForExport['date_add'])
有关,只支持"English date format"并返回false
。结果可以是seen in this example。
#locale formatted
var_dump(strtotime('30/12/2015')); //bool(false)
#English formatted
var_dump(strtotime('12/30/2015')); //int(1451430000)
要提供更全面的解决方案,请使用图像中显示的日期中的d/m/Y
format (01/01/1979)
。正如我注意到图像中的某些日期被格式化为30/11/-0001
,这也会使new \DateTime
失败并抛出我的评论中所述的异常。
该解决方案将验证所提供的date_add
值是否使用所需格式。然后使用验证日期添加两天并为delivery_date
设置所需的格式。
例子30/12/2015
:https://3v4l.org/RZ8VZ
$dateFormat = 'd/m/Y';
if (!empty($readyForExport['date_add']) &&
$dateAdd = DateTimeImmutable::createFromFormat($dateFormat, $readyForExport['date_add']))
{
$dateMod = $dateAdd->modify('+2 days');
$readyForExport['delivery_date'] = $dateMod->format($dateFormat);
}
var_dump($readyForExport);
var_dump($dateAdd->format($dateFormat));
var_dump($dateMod->format($dateFormat));
结果:
array(2) {
["date_add"]=>
string(10) "30/12/2015"
["delivery_date"]=>
string(10) "01/01/2016"
}
string(10) "30/12/2015"
string(10) "01/01/2016"
无效的日期示例30/11/-0001
:https://3v4l.org/3A8LI
结果:
array(2) {
["date_add"]=>
string(11) "30/11/-0001"
["delivery_date"]=>
NULL
}