How to get next month dates in JSON object array?

我只是一个虾纸丫 提交于 2020-12-15 05:16:11

问题


I have a php code as shown below in which on the 1st day of every month, I am copying 2nd JSON object array (next_month) content into 1st JSON object array (current_month).

In the 2nd JSON object array (next_month), I want to have next month dates. That will also happen on the 1st day of every month. Currently I am storing nada. Let us suppose that today is 1st day of November.

php code:

$value = json_decode(file_get_contents('../hyt/dates.json'));
    
if ((date('j') == 1)) {
    $month = 11;
    $year = date('Y');
    $current_month_days = (date('t', strtotime($year . '-' . $month . '-01')));
    $next_month_days = (date('t', strtotime($year . '-' . ($month + 1) . '-01')));
    $value->current_month = $value->next_month;   // Line Y
    $value->next_month = array_fill(0, ($next_month_days), nada);    // Line Z 
}

The current look of JSON (dates.json) is shown below:

{"current_month": ["2020-10-01", "2020-10-02", "2020-10-03", "2020-10-04", "2020-10-05", "2020-10-06", "2020-10-07", "2020-10-08", "2020-10-09", "2020-10-10", "2020-10-10", "2020-10-12", "2020-10-13", "2020-10-14", "2020-10-15", "2020-10-16", "2020-10-17", "2020-10-18", "2020-10-19", "2020-10-20", "2020-10-21", "2020-10-22", "2020-10-23", "2020-10-24", "2020-10-25", "2020-10-26", "2020-10-27", "2020-10-28", "2020-10-29", "2020-10-30","2020-10-31"], 
"next_month": ["2020-11-01", "2020-11-02", "2020-11-03", "2020-11-04", "2020-11-05", "2020-11-06", "2020-11-07", "2020-11-08", "2020-11-09", "2020-11-11", "2020-11-11", "2020-11-12", "2020-11-13", "2020-11-14", "2020-11-15", "2020-11-16", "2020-11-17", "2020-11-18", "2020-11-19", "2020-11-20", "2020-11-21", "2020-11-22", "2020-11-23", "2020-11-24", "2020-11-25", "2020-11-26", "2020-11-27", "2020-11-28", "2020-11-29", "2020-11-30"] }

Problem Statement:

I am wondering what changes I should make at Line Z so that in the second JSON object array, I am able to get next month dates. At present, I am storing nada.

The content which I want in the JSON on the 1st day of November month after successful execution of Line Y and Line Z is:

{"current_month": ["2020-11-01", "2020-11-02", "2020-11-03", "2020-11-04", "2020-11-05", "2020-11-06", "2020-11-07", "2020-11-08", "2020-11-09", "2020-11-11", "2020-11-11", "2020-11-12", "2020-11-13", "2020-11-14", "2020-11-15", "2020-11-16", "2020-11-17", "2020-11-18", "2020-11-19", "2020-11-20", "2020-11-21", "2020-11-22", "2020-11-23", "2020-11-24", "2020-11-25", "2020-11-26", "2020-11-27", "2020-11-28", "2020-11-29", "2020-11-30"], 
"next_month": ["2020-12-01", "2020-12-02", "2020-12-03", "2020-12-04", "2020-12-05", "2020-12-06", "2020-12-07", "2020-12-08", "2020-12-09", "2020-12-11", "2020-12-11", "2020-12-12", "2020-12-13", "2020-12-14", "2020-12-15", "2020-12-16", "2020-12-17", "2020-12-18", "2020-12-19", "2020-12-20", "2020-12-21", "2020-12-22", "2020-12-23", "2020-12-24", "2020-12-25", "2020-12-26", "2020-12-27", "2020-12-28", "2020-12-29", "2020-12-30", "2020-12-31"] }

This is what I have tried:

This is what I have tried at Line Z but its storing only today's date in JSON object array.

$value->next_month = array_fill(0, ($next_month_days), date("Y-m-d")); // Line Z


回答1:


I think you should completely recreate your JSON string. It starts on the first day of the current month. The loop always runs as long as the month remains. The whole thing then again for the following month.

$arr = $cur = [];
$date = date_create('first day of this month 00:00');
$startMonth = $month = $date->format('m');
while($startMonth == $month){
  $cur[] = $date->format('Y-m-d');
  $date->modify('+1 Day');
  $month = $date->format('m');
}
$arr["current_month"] = $cur;
$startMonth = $month;
$cur = [];
while($startMonth == $month){
  $cur[] = $date->format('Y-m-d');
  $date->modify('+1 Day');
  $month = $date->format('m');
}
$arr["next_month"] = $cur;
$jsonStr = json_encode($arr);



回答2:


You are using array_fill, which is used to fill at least part of an array with the same value. I would recommend using a simple for loop:

$next_month_array = [];
$next_month = $month < 12 ? $month + 1 : 1;
$year = date('Y');

for($day_counter = 1; $day_counter <= $next_month_days; $day_counter++) {
  $next_month_array[] = "$year-$next_month-$day_counter";
}

$value->next_month = $next_month_array;


来源:https://stackoverflow.com/questions/64716437/how-to-get-next-month-dates-in-json-object-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!