繁体   English   中英

php 从数组到日期累加数字

[英]php Add numbers cumulatively from array to date

我有数字数组,没有序列化键。 并有个约会。 如何添加具有数组值累积的日期?

我将 function 与 foreach{} 一起使用,并像这样添加日期:

$nextDate[] = date("Y-m-d", strtotime('+'.$g.' day', strtotime($aDate)));

数据是:

$date='2019-01-01 00:00:00';
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

我想退出,但我希望数组首先成为 id=date+current days,然后成为 id=prevdate+current days

像那样



$result=[
    //'4'=>'1',
    '4'=>'2019-01-02',// $date+1
    //'6'=>'2',
    '6'=>'2019-01-04',//previous result + 2
    //'8'=>'5',
    '8'=>'2019-01-09',//previous result + 5
    //'20'=>'2',
    '20'=>'2019-01-11',//previous result + 2
    //'54'=>'6',
    '54'=>'2019-01-17',//previous result + 2
    //'62'=>'4',
    '62'=>'2019-01-21',//previous result + 4
    //'64'=>'1',
    '64'=>'2019-01-22',//previous result + 1
    //'65'=>'1',
    '65'=>'2019-01-23',//previous result + 1
    //'68'=>'1',
    '68'=>'2019-01-24',//previous result + 1
    //'70'=>'1',
    '70'=>'2019-01-25',//previous result + 1
    //'78'=>'20'
    '78'=>'2019-02-14',//previous result + 20
];

这里是 go。 我传递了日期 object,这是通过引用,因此它会在我们添加到它时修改 object。

$date = new DateTime('2019-01-01 00:00:00');
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

$result = array_map(function($days) use ($date) {
  $date->add(new DateInterval('P' . $days . 'D'));
  return  $date->format('Y-m-d');
}, $days);

print_r($result);

一个简单的 foreach 也可以。

DateTime object $dateTime 在每个周期通过 modify 方法进行更改。 以下格式方法不会改变这一点,只会返回新数组值所需的日期字符串。

//given
$date='2019-01-01 00:00:00';
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

//calculation
$dateTime = new DateTime($date);
foreach($days as $key => $day){
  $days[$key] = $dateTime->modify($day." Days")->format('Y-m-d');
}

//Test output
echo "<pre>".var_export($days,true)."</pre>";

Output

array (
  4 => '2019-01-02',
  6 => '2019-01-04',
  8 => '2019-01-09',
  20 => '2019-01-11',
  54 => '2019-01-17',
  62 => '2019-01-21',
  64 => '2019-01-22',
  65 => '2019-01-23',
  68 => '2019-01-24',
  70 => '2019-01-25',
  78 => '2019-02-14',
)

注意:通过 var_export 的输出可以被复制并简单地用作 php 源代码以进行进一步测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM