Open In App
Related Articles

Program to check if a date is valid or not

Improve Article
Improve
Save Article
Save
Like Article
Like

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.
Recommended Practice

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.
If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 16 Feb, 2023
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials