0

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

2 Answers 2

0

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);
Sign up to request clarification or add additional context in comments.

Comments

0

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;

3 Comments

$next_month = $month + 1;? And if chrismas then the next month is 13 ?
@Technoh Thats the same question I have. I am wondering what modification I need to make so that it displays year 2021 in case $month is 12.
Oh yeah that completely skipped my mind, thanks for the reminder. This is why I like this site :) I will update the answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.