添加从变量奇数行为获取的PHP日期

时间:2018-03-05 13:06:09

标签: php arrays date variables

我遇到了这个问题:我必须添加一些日期来自包含数组中日期值的变量的日期。 我已经按照这里找到的许多指南,但它给了我一个奇怪的行为。当我导出由所有代码处理产生的.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中添加了几个月而不是几天......

csv screenshot

非常感谢。

3 个答案:

答案 0 :(得分:0)

我认为问题是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");

答案 1 :(得分:0)

您应该使用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');

答案 2 :(得分:0)

您遇到的问题与您有关 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格式 (01/01/1979) ,提供更全面的解决方案。我注意到图像中的某些日期格式为30/11/-0001,这也会导致new \DateTime失败并抛出我的评论中所述的异常。

此解决方案将验证所提供的date_add值是否使用所需格式。 然后使用经过验证的日期添加两天,并为delivery_date设置所需的格式。

示例30/12/2015https://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/-0001https://3v4l.org/3A8LI

结果:

array(2) {
  ["date_add"]=>
  string(11) "30/11/-0001"
  ["delivery_date"]=>
  NULL
}