Home > Software design >  How to process insane date inputs with php
How to process insane date inputs with php

Time:12-28

I have a code in php for processing the personal details of a person. I need code to handle the date input such that when the user inputs a year like 1900 and below then the program outputs That is impossible. I have successfully handled how the program should respond if the date input is in the future. The program takes date input from the user in the European Date Format for example 21-10-1990, Am having a hard time processing this because the php in-built function time() returns a unix timestamp measured since January 1st 1970. Is there a way I can circumvent this to achieve detection of years startimg from 1900 and below without applying a conditional structure to the year directly?

Code

<?php 

class User{
    //initialize the user properties
    public string $name="";
    public string $dob="";
    public string $national_id="";
    public string $tel="";
    public string $email="";
    public function User($user_name,$dob,$national_id,$tel,$mail){
        //assign the values inside the constructor
        $this->name=$user_name;
        $this->dob=$dob;
        $this->national_id=$national_id;
        $this->tel=$tel;
        $this->email=$mail;
    }
    function validate_dob(){
    
    
        //get a new time in millis from the date passed in
        
        $date_obj=strtotime($this->dob);
        //add conditional structures to make sure the date is not in the 
        //future and is within acceptable time range
        //get the current time from the unix timestamp
        $current_time=time();
        if($date_obj>$current_time){
            echo "\n";
            echo "That is impossible, you birth date cannot be in the future";
        }
        //if the date is also 1900 and below then also throw an error, i need help here

    }
}

CodePudding user response:

Using DateTime instead of time() and strtotime()

$date_obj = DateTime::createFromFormat('d-m-Y',$this->dob);
$current_time = new DateTime('NOW');
$date1900 = DateTime::createFromFormat('d-m-Y','01-01-1900');

if($date_obj > $current_time){
    echo "\n";
    echo "That is impossible, your birth date cannot be in the future";
}else
if($date_obj < $date1900){
    echo "\n";
    echo "That is impossible, your birth date cannot before the year 1900";
}

CodePudding user response:

Use DateTime()

$date1   =   date('d-m-Y',strtotime($this->dob));
$date2   =   date('d-m-Y',strtotime(time());

$d1 = new DateTime($date1);
$d2 = new DateTime($date2); 
if($date1 >$date2 ){
     echo "\n";
   echo "That is impossible, you birth date cannot be in the future";
}
  • Related