Home > Software design >  Date difference in PHP code does not execute
Date difference in PHP code does not execute

Time:12-19

I have a code in PHP 5.5.11 where I am trying to do the following:

  1. Get today's date in a variable --> $today
  2. Calculate the end of month from a date in a form --> $st_dt_eom

if difference between these 2 dates is more than 5 days then execute a code. The code in the if condition below does not execute.


$today= date();

if($_POST['Submit']=='SAVE')
 {
    $st_dt=YYYYMMDD($_POST['st_dt'],"-"); 
    $st_dt_eom= datetime::createfromformat('YYYYMMDD',$st_dt);;
    $st_dt_eom->modify('last day of this month');
    $diff = $today->diff($st_dt_eom);
    $diffDays= intval($diff->format("%d")); //to get integer number of days

    if($diffDays>5){

     
     redirect("index.php");
     
}

}

CodePudding user response:

An example:

// 2022-12-19
$today = date('Y-m-d');

// $_POST['st_dt']
$st_dt = '2022-12-31';

function dateDiffDays($today, $st_dt)
{
    $today_obj= DateTime::createfromformat('Y-m-d', $today);
    $st_dt_eom= DateTime::createfromformat('Y-m-d', $st_dt);

    $diff = $today_obj->diff($st_dt_eom);

    return $diff->days;
}

// int(12)
$res = dateDiffDays($today, $st_dt);

use var_dump to locate your bug.

CodePudding user response:

A few suggestions to improve your code and produce something workable:

<?php

// Instead of using date(), use a DateTime() then you're comparing two DateTimes later on
$today = new DateTime();

// I'm assuming that your YYYYMMDD function removes "-" from the $_POST['st_dt'] 
// to provide a date in the format YYYYMMDD (or Ymd in PHP). 
// Unfortunately, DateTime doesn't understand that format. 
// So I'd change this for keeping Y-m-d (YYYY-MM-DD).
// Or modify your code to return that format!
$st_dt = $_POST['st_dt'];

// Watch out for your cAsE when using PHP functions! 
$st_dt_eom = DateTime::createFromFormat('Y-m-d',$st_dt);

$st_dt_eom->modify('last day of this month');
$diff = $today->diff($st_dt_eom);
$diffDays= intval($diff->format("%d"));
if($diffDays > 5){
   redirect("index.php");
}
  • Related