penmas
penmas

Reputation: 1017

Check if dateTime is a weekend or a weekday

<script Language="c#" runat="server">
  void Page_Load()
  {
   DateTime date = DateTime.Now;
   dateToday.Text = " " + date.ToString("d");
   DayOfWeek day = DateTime.Now.DayOfWeek;
   dayToday.Text = " " + day.ToString();

   if ((dayToday == DayOfWeek.Saturday) && (dayToday == DayOfWeek.Sunday))
    {
    Console.WriteLine("This is a weekend");
    }

 }
</script>

Using dateTime, I am trying to test whether or not the current date is a weekday or weekend, then I would like to print the response to the user. Currently I am receiving a Runtime Error. If I remove my if statement the first items (the current date, and the day of the week) print properly.

Upvotes: 56

Views: 129450

Answers (7)

user1785960
user1785960

Reputation: 636

How to check if dateTime is a weekend or a weekday?

The answer for DateTime object is:

public bool IsWeekend(DateTime date)
{
    return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
}
    
[Fact]
public void IsWeekend()
{
    IsWeekend(new DateTime(2023, 09, 16)).ShouldBe(true);
    IsWeekend(new DateTime(2023, 09, 17)).ShouldBe(true);
    IsWeekend(new DateTime(2023, 09, 15)).ShouldBe(false);
}

Upvotes: 1

Murat &#214;zbayraktar
Murat &#214;zbayraktar

Reputation: 152

        List<DateTime> datelist = new List<DateTime>();

        int balanceday = 1;
        while (datelist.Count < 10)
        {
            DateTime day = DateTime.Now.AddDays(balanceday + datelist.Count).Date;
            if (day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday)
            {
                datelist.Add(day);
            }
            else
            {
                balanceday++;
            }
        }

Upvotes: 1

Farid Imranov
Farid Imranov

Reputation: 2075

You wrote wrong varable in the following if statement:

if ((dayToday == DayOfWeek.Saturday) || (dayToday == DayOfWeek.Sunday))
{
    Console.WriteLine("This is a weekend");
}

instead of dayToday you must use day varable in the condition.

UPDATE: Also you made mistake in condition. There must be or instead of and.

Correct code is

if ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday))
{
    Console.WriteLine("This is a weekend");
}

Upvotes: 105

Akshey Bhat
Akshey Bhat

Reputation: 8545

You need to put your asp controls inside form tag with runat="server".

<body>
    <form id="frm" runat="server">
    <p>
    Today's date is: <asp:Label ID="dateToday" runat="server" />
    <br/>
    The day of the week is: <asp:Label ID="dayToday" runat="server" />
    <br/>
    </form>
</body>

Signature of Page_Load method is incorrect in your code. Also you should use Response.Write for asp websites instead of Console.Writeline. There should be OR(||) instead of AND(&&) when you are checking for the day of the week.

 <script language="c#" runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                DateTime date = DateTime.Now;
                dateToday.Text = " " + date.ToString("d");
                DayOfWeek day = DateTime.Now.DayOfWeek;
                dayToday.Text = " " + day.ToString();

                if ((dayToday.Text == DayOfWeek.Saturday.ToString()) || (dayToday.Text == DayOfWeek.Sunday.ToString()))
                {
                    Response.Write("This is a weekend");
                }
            }
        </script>

Upvotes: -1

Shaun Luttin
Shaun Luttin

Reputation: 141512

You are receiving an error because you are comparing an enum with a string.

// dayToday is a string
// DayOfWeek.Saturday is an enum
if ((dayToday == DayOfWeek.Saturday) && (dayToday == DayOfWeek.Sunday))

Use DayOfWeek.Saturday.ToString() to compare against a string. You will also want not to pad the dayToday string. Alternatively, use the day variable to compare against an enum.

https://dotnetfiddle.net/gUGJ0J

using System;

public class Program
{
    public static void Main()
    {
        DateTime date = DateTime.Now;

        string dateToday = date.ToString("d");
        DayOfWeek day = DateTime.Now.DayOfWeek;
        string dayToday = day.ToString();

        // compare enums
        if ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday))
        {
            Console.WriteLine(dateToday + " is a weekend");
        }
        else
        {
            Console.WriteLine(dateToday + " is not a weekend");
        }

        // compare strings
        if ((dayToday == DayOfWeek.Saturday.ToString()) || (dayToday == DayOfWeek.Sunday.ToString()))
        {
            Console.WriteLine(dateToday + " is a weekend");
        }
        else
        {
            Console.WriteLine(dateToday + " is not a weekend");
        }
    }
}

Upvotes: 2

DAXaholic
DAXaholic

Reputation: 35358

You are comparing your ASP.NET label dayToday against an enumeration element of DayOfWeek which of course fails

Probably you want to replace dayToday with day in your if statement, i.e. from

if ((dayToday == DayOfWeek.Saturday) && (dayToday == DayOfWeek.Sunday))

to

if ((day == DayOfWeek.Saturday) && (day == DayOfWeek.Sunday))

In addition, you probably also want to replace the logical 'and' (&&) with a logical 'or' (||) to finally

if ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday))

Upvotes: 14

Sajeetharan
Sajeetharan

Reputation: 222582

if ((day >= DayOfWeek.Monday) && (day<= DayOfWeek.Friday))
{
    // action
}

Upvotes: 4

Related Questions