Program to check if a date is valid or not
Last Updated :
23 Jul, 2025
Given a date, check if it is valid or not. It may be assumed that the given date is in range from 01/01/1800 to 31/12/9999.
Examples :
Input : d = 10, m = 12, y = 2000
Output : Yes
The given date 10/12/2000 is valid
Input : d = 30, m = 2, y = 2000
Output : No
The given date 30/2/2000 is invalid. The
February month cannot have 30 as day.
The idea is simple. We need to handle following things.
1) y, m and d are in allowed range.
2) Days in February are in allowed range and leap year is handled.
3) Days in 30 day months are handled.
Below is the implementation to check if a given year is valid or not.
C++
// C++ program to check if
// given date is valid or not.
#include<iostream>
using namespace std;
const int MAX_VALID_YR = 9999;
const int MIN_VALID_YR = 1800;
// Returns true if
// given year is valid.
bool isLeap(int year)
{
// Return true if year
// is a multiple of 4 and
// not multiple of 100.
// OR year is multiple of 400.
return (((year % 4 == 0) &&
(year % 100 != 0)) ||
(year % 400 == 0));
}
// Returns true if given
// year is valid or not.
bool isValidDate(int d, int m, int y)
{
// If year, month and day
// are not in given range
if (y > MAX_VALID_YR ||
y < MIN_VALID_YR)
return false;
if (m < 1 || m > 12)
return false;
if (d < 1 || d > 31)
return false;
// Handle February month
// with leap year
if (m == 2)
{
if (isLeap(y))
return (d <= 29);
else
return (d <= 28);
}
// Months of April, June,
// Sept and Nov must have
// number of days less than
// or equal to 30.
if (m == 4 || m == 6 ||
m == 9 || m == 11)
return (d <= 30);
return true;
}
// Driver code
int main(void)
{
isValidDate(10, 12, 2000)? cout << "Yes\n" :
cout << "No\n";
isValidDate(31, 11, 2000)? cout << "Yes\n" :
cout << "No\n";
}
Java
// Java program to check if
// given date is valid or not.
import java.io.*;
class GFG
{
static int MAX_VALID_YR = 9999;
static int MIN_VALID_YR = 1800;
// Returns true if
// given year is valid.
static boolean isLeap(int year)
{
// Return true if year is
// a multiple of 4 and not
// multiple of 100.
// OR year is multiple of 400.
return (((year % 4 == 0) &&
(year % 100 != 0)) ||
(year % 400 == 0));
}
// Returns true if given
// year is valid or not.
static boolean isValidDate(int d,
int m,
int y)
{
// If year, month and day
// are not in given range
if (y > MAX_VALID_YR ||
y < MIN_VALID_YR)
return false;
if (m < 1 || m > 12)
return false;
if (d < 1 || d > 31)
return false;
// Handle February month
// with leap year
if (m == 2)
{
if (isLeap(y))
return (d <= 29);
else
return (d <= 28);
}
// Months of April, June,
// Sept and Nov must have
// number of days less than
// or equal to 30.
if (m == 4 || m == 6 ||
m == 9 || m == 11)
return (d <= 30);
return true;
}
// Driver code
public static void main(String args[])
{
if (isValidDate(10, 12, 2000))
System.out.println("Yes");
else
System.out.println("No");
if (isValidDate(31, 11, 2000))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed
// by Nikita Tiwari.
Python3
# Python Program to check
# if a date is valid or not
import datetime
def date_validation(day, month, year):
isValidDate = True
try :
datetime.datetime(int(year),
int(month), int(day))
except ValueError :
isValidDate = False
if(isValidDate) :
print ("Yes")
else :
print ("No")
date_validation(10,12,2000)
date_validation(31,11,2000)
# This code is contributed by ajay0007
C#
// C# program to check if
// given date is valid or not.
using System;
class GFG
{
const int MAX_VALID_YR = 9999;
const int MIN_VALID_YR = 1800;
// Returns true if
// given year is valid.
static bool isLeap(int year)
{
// Return true if year is a
// multiple of 4 and not
// multiple of 100. OR year
// is multiple of 400.
return (((year % 4 == 0) &&
(year % 100 != 0)) ||
(year % 400 == 0));
}
// Returns true if given
// year is valid or not.
static bool isValidDate(int d,
int m,
int y)
{
// If year, month and day
// are not in given range
if (y > MAX_VALID_YR ||
y < MIN_VALID_YR)
return false;
if (m < 1 || m > 12)
return false;
if (d < 1 || d > 31)
return false;
// Handle February month
// with leap year
if (m == 2)
{
if (isLeap(y))
return (d <= 29);
else
return (d <= 28);
}
// Months of April, June,
// Sept and Nov must have
// number of days less than
// or equal to 30.
if (m == 4 || m == 6 ||
m == 9 || m == 11)
return (d <= 30);
return true;
}
// Driver code
public static void Main()
{
if (isValidDate(10, 12, 2000))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
if (isValidDate(31, 11, 2000))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed
// by Anant Agarwal.
PHP
<?php
// PHP program to check if
// given date is valid or not.
// Returns true if
// given year is valid.
function isLeap($year)
{
// Return true if year is
// a multiple of 4 and
// not multiple of 100.
// OR year is multiple of 400.
return ((($year % 4 == 0) &&
($year % 100 != 0)) ||
($year % 400 == 0));
}
// Returns true if given
// year is valid or not.
function isValidDate($d, $m, $y)
{
$MAX_VALID_YR = 9999;
$MIN_VALID_YR = 1800;
// If year, month and day
// are not in given range
if ($y > $MAX_VALID_YR ||
$y < $MIN_VALID_YR)
return false;
if ($m < 1 || $m > 12)
return false;
if ($d < 1 || $d > 31)
return false;
// Handle February month
// with leap year
if ($m == 2)
{
if (isLeap($y))
return ($d <= 29);
else
return ($d <= 28);
}
// Months of April, June,
// Sept and Nov must have
// number of days less than
// or equal to 30.
if ($m == 4 || $m == 6 ||
$m == 9 || $m == 11)
return ($d <= 30);
return true;
}
// Driver code
{
if(isValidDate(10, 12, 2000))
echo "Yes\n" ;
else
echo "No\n";
if(isValidDate(31, 11, 2000))
echo "Yes\n" ;
else
echo "No\n";
}
// This code is contributed
// by nitin mittal.
?>
JavaScript
<script>
// Javascript program to check if
// given date is valid or not.
const MAX_VALID_YR = 9999;
const MIN_VALID_YR = 1800;
// Returns true if
// given year is valid.
function isLeap(year)
{
// Return true if year
// is a multiple of 4 and
// not multiple of 100.
// OR year is multiple of 400.
return (((year % 4 == 0) &&
(year % 100 != 0)) ||
(year % 400 == 0));
}
// Returns true if given
// year is valid or not.
function isValidDate(d, m, y)
{
// If year, month and day
// are not in given range
if (y > MAX_VALID_YR ||
y < MIN_VALID_YR)
return false;
if (m < 1 || m > 12)
return false;
if (d < 1 || d > 31)
return false;
// Handle February month
// with leap year
if (m == 2)
{
if (isLeap(y))
return (d <= 29);
else
return (d <= 28);
}
// Months of April, June,
// Sept and Nov must have
// number of days less than
// or equal to 30.
if (m == 4 || m == 6 ||
m == 9 || m == 11)
return (d <= 30);
return true;
}
// Driver code
isValidDate(10, 12, 2000) ? document.write("Yes<br>") :
document.write("No<br>");
isValidDate(31, 11, 2000) ? document.write("Yes<br>") :
document.write("No<br>");
// This code is contributed by souravmahato348
</script>
Output :
Yes
No
Time Complexity: O(1)
Auxiliary Space: O(1), since no extra space has been taken.
Similar Reads
Check if a given Year is Leap Year You are given an Integer n. Return true if It is a Leap Year otherwise return false. A leap year is a year that contains an additional day, February 29th, making it 366 days long instead of the usual 365 days. Leap years are necessary to keep our calendar in alignment with the Earth's revolutions ar
4 min read
Print all palindrome dates between the given years Given two years Y1 and Y2 where 103 ⤠Y1 ⤠Y2 ⤠106, the task is to find and print all the dates which are palindromes between the given years.Examples: Input: Y1 = 2001, Y2 = 2005 Output: 10022001 20022002Input: Y1 = 5000, Y2 = 5010 Output: 10055001 20055002 30055003 01055010 Approach: Since the fi
10 min read
Print all palindrome dates between the given years Given two years Y1 and Y2 where 103 ⤠Y1 ⤠Y2 ⤠106, the task is to find and print all the dates which are palindromes between the given years.Examples: Input: Y1 = 2001, Y2 = 2005 Output: 10022001 20022002Input: Y1 = 5000, Y2 = 5010 Output: 10055001 20055002 30055003 01055010 Approach: Since the fi
10 min read
Print all palindrome dates between the given years Given two years Y1 and Y2 where 103 ⤠Y1 ⤠Y2 ⤠106, the task is to find and print all the dates which are palindromes between the given years.Examples: Input: Y1 = 2001, Y2 = 2005 Output: 10022001 20022002Input: Y1 = 5000, Y2 = 5010 Output: 10055001 20055002 30055003 01055010 Approach: Since the fi
10 min read
Validate Traditional DateTime Format (YYYY-MM-DD HH:MM:SS) Given some Traditional Date Time Formats, the task is to check if they are valid or not using regular expressions. Rules for the valid format are: It should contain only digits (0 - 9) and a few words like (SEPTEMBER, Sep, SEP).It can only contain a few special characters like ":", and "-".It can on
5 min read
Validating traditional time formats using Regular Expression Given a string Time Format, the task is to check whether the string follows the time formats "HH: MM: SS" or "HH: MM" using Regular Expression. Rules for valid time formats: It should contain only digits[0-9] and colon (:).No alphabets are allowed or any special characters. Examples: Input: "12: 55"
6 min read