# C Program to check if a date is valid or not

Given date in format date, month and year in integer. The task is to find whether the date is possible on not.

Valid date should range from 1/1/1800 – 31/12/9999 the dates beyond these are invalid.

These dates would not only contains range of year but also all the constraints related to a calendar date.

Constraints are −

• Date can’t be less than 1 and more than 31
• Month can’t be less than 1 and more than 12
• Year can’t be less than 1800 and more than 9999
• When the months are April, June, September, November the date can’t be more than 30.
• When the month is February we have to check whether,
• If the year is leap year then the number of days can’t be more than 29
• Else the number of days can’t be more than 28.

If all the constraints are true then it is a valid date, Else it is not.

## Example

Input: y = 2002
d = 29
m = 11
Output: Date is valid
Input: y = 2001
d = 29
m = 2
Output: Date is not valid

## Algorithm

START
In function int isleap(int y)
Step 1-> If (y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0) then,
Return 1
Step 2-> Else
Return 0
In function int datevalid(int d, int m, int y)
Step 1-> If y < min_yr || y > max_yr then,
Return 0
Step 2-> If m < 1 || m > 12 then,
Return 0
Step 3-> If d < 1 || d > 31 then,
Return 0
Step 4-> If m == 2 then,
If isleap(y) then,
If d <= 29 then,
Return 1
Else
Return 0
End if
End if
Step 5-> If m == 4 || m == 6 || m == 9 || m == 11 then,
If(d <= 30)
Return 1
Else
Return 0
Return 1
End Function
In main(int argc, char const *argv[])
Step 1->Assign and initialize values as y = 2002, d = 29, m = 11
Step 2-> If datevalid(d, m, y) then,
Print "Date is valid"
Step 3-> Else
Print "date is not valid”
End main
STOP

## Example

Live Demo

#include <stdio.h>
#define max_yr 9999
#define min_yr 1800
//to check the year is leap or not
//if the year is a leap year return 1
int isleap(int y) {
if((y % 4 == 0) && (y % 100 != 0) && (y % 400 == 0))
return 1;
else
return 0;
}
//Function to check the date is valid or not
int datevalid(int d, int m, int y) {
if(y < min_yr || y > max_yr)
return 0;
if(m < 1 || m > 12)
return 0;
if(d < 1 || d > 31)
return 0;
//Now we will check date according to month
if( m == 2 ) {
if(isleap(y)) {
if(d <= 29)
return 1;
else
return 0;
}
}
//April, June, September and November are with 30 days
if ( m == 4 || m == 6 || m == 9 || m == 11 )
if(d <= 30)
return 1;
else
return 0;
return 1;
}
int main(int argc, char const *argv[]) {
int y = 2002;
int d = 29;
int m = 11;
if(datevalid(d, m, y))
printf("Date is valid");
else
printf("date is not valid");
return 0;
}

## Output

If run the above code it will generate the following output −

Date is valid

Updated on: 18-Oct-2019

3K+ Views