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 } }
Advertisement
Answer
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"; }