Number of Fridays Between Two Dates

Number of fridays between two dates

This will do it:

select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data

Perhaps best if I break that down. The NEXT_DAY function returns the next day that is a (Friday in this case) after the date.

So to find the first Friday after d1 would be:

next_day( d1, 'FRI')

But if d1 is a Friday that would return the following Friday, so we adjust:

next_day( d1-1, 'FRI')

Similarly to find the last Friday up to and including d2 we do:

next_day( d1-7, 'FRI')

Subtracting the 2 gives a number of days: 0 if they are the same date, 7 if they a re a week apart and so on:

next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI') 

Convert to weeks:

(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7

Finally, if they are the same date we get 0, but really there is 1 Friday, and so on so we add one:

((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1

Number of fridays between two dates (vb.net)

I am not sure if you have really tried your own code, because i see there are errors in syntax and even the approach is not correct also. Anyway you can try the following approach :

Dim count As Integer = 0
Dim startDate As DateTime = DateTimePicker1.Value
Dim TotalDays As Long = DateDiff("d", DateTimePicker1.Value, DateTimePicker2.Value) + 1
For i As Long = 1 To TotalDays
If startDate.DayOfWeek = DayOfWeek.Friday Then
count += 1
End If
startDate = startDate.AddDays(1)
Next
TextBox1.Text = count.ToString()

How do I find the number of fridays between two dates(including both the dates)

Number of days between two dates:

import datetime
start = datetime.datetime.strptime(raw_input('Enter date in format yyyy,mm,dd : '), '%Y,%m,%d')
end = datetime.datetime.strptime(raw_input('Enter date in format yyyy,mm,dd:'), '%Y,%m,%d')
diff = end-start
print diff.days
>> 361

Getting number of Fridays:

# key 0 would be Monday as the start date is from Monday
days = {
0: 0,
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
}
full_weeks = (diff.days) / 7
remainder = (diff.days) % 7
first_day = start.weekday() # Start date is on Monday
for day in days.keys():
days[day] = full_weeks
for i in range(0, remainder):
days[(first_day + i) % 7] += 1
print days[4] # Gives number of Fridays between the date range
>> 2

Python docs - Datetime: https://docs.python.org/2/library/datetime.html

How to get dates for every Friday between two dates?

You just need to add a weekday parameter to your method and check if the weekday of the date inside the loop before adding it to your array:

extension Formatter {
static let date = DateFormatter()
}

func dates(for date: String, weekday: Int? = nil) -> [String] {
Formatter.date.locale = Locale(identifier: "en_US_POSIX")
Formatter.date.dateFormat = "yyyy-MM-dd"
// first get the endDate
guard var endDate = Formatter.date.date(from: date) else { return [] }
// for calendrical calculations you should use noon time
endDate = Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: endDate)!
// lets get todays noon time to start
var date = Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: Date())!
var dates: [String] = []
// while date less than or equal to end date
while date <= endDate {
if weekday == nil {
dates.append(Formatter.date.string(from: date))
date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
} else if let weekday = weekday, Calendar.current.component(.weekday, from: date) == weekday {
// add the formatted date to the array
dates.append(Formatter.date.string(from: date))
date = Calendar.current.date(byAdding: .weekOfYear, value: 1, to: date)!
} else {
date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
}
}
return dates
}

dates(for: "2019-12-25")  // ["2019-10-23", "2019-10-24", "2019-10-25", "2019-10-26", "2019-10-27", "2019-10-28", "2019-10-29", "2019-10-30", "2019-10-31", "2019-11-01", "2019-11-02", "2019-11-03", "2019-11-04", "2019-11-05", "2019-11-06", "2019-11-07", "2019-11-08", "2019-11-09", "2019-11-10", "2019-11-11", "2019-11-12", "2019-11-13", "2019-11-14", "2019-11-15", "2019-11-16", "2019-11-17", "2019-11-18", "2019-11-19", "2019-11-20", "2019-11-21", "2019-11-22", "2019-11-23", "2019-11-24", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-11-29", "2019-11-30", "2019-12-01", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-07", "2019-12-08", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-14", "2019-12-15", "2019-12-16", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-21", "2019-12-22", "2019-12-23", "2019-12-24", "2019-12-25"]
dates(for: "2019-12-25", weekday: 6) // ["2019-10-25", "2019-11-01", "2019-11-08", "2019-11-15", "2019-11-22", "2019-11-29", "2019-12-06", "2019-12-13", "2019-12-20"]

func firstDayOfTheMonth(until date: String) -> [String] {
Formatter.date.locale = Locale(identifier: "en_US_POSIX")
Formatter.date.dateFormat = "yyyy-MM-dd"
guard let endDate = Formatter.date.date(from: date) else { return [] }
var date = Date()
var dates: [String] = []
// while date less than or equal to end date
while let firstDayOfTheMonth = Calendar.current.nextDate(after: date, matching: .init(day: 1), matchingPolicy: .nextTime), firstDayOfTheMonth <= endDate {
dates.append(Formatter.date.string(from: firstDayOfTheMonth))
date = firstDayOfTheMonth
}
return dates
}

firstDayOfTheMonth(until: "2019-12-25")  // ["2019-11-01", "2019-12-01"]

How to display all Fridays Date between two dates

To Answer your question, instead of printing allFridays in one go, iterate over each element of list i.e allFridays, convert into string and then print

foreach(var friday in allFridays)
Console.WriteLine(friday);

Why you are getting System.Collections.Generic.List[System.DateTime] ?

Console.WriteLine(), for non primitive type by default calls
.ToString() function which prints type of it(if it is not overridden). In your case, you
need an individual date not a type of List, so you need to iterate
each DateTime from the list and print each date.


One Liner solution:

Console.WriteLine(string.Join(Environment.NewLine, allFridays));

Alternate solution:

public static List<DateTime> GetWeekdayInRange(this DateTime @from, DateTime to, DayOfWeek day)
{
//Create list of DateTime to store range of dates
var dates = new List<DateTime>();

//Iterate over each DateTime and store it in dates list
for (var dt = @from; dt <= to; dt = dt.AddDays(1))
dates.Add(dt);

//Filter date based on DayOfWeek
var filteredDates = dates.Where(x => x.DayOfWeek == day).ToList();
return filteredDates;
}

...

var @from = DateTime.Today; // 25/8/2019
var to = DateTime.Today.AddDays(23); // 23/9/2019
var allFriday = @from.GetWeekdayInRange(to, DayOfWeek.Friday);

Console.WriteLine(string.Join(Environment.NewLine, allFridays));

.NET FIDDLE

How to find number of Mondays or any other weekday between two dates in Python?

This code still uses a for loop and an if/else.

import datetime
import calendar

def weekday_count(start, end):
start_date = datetime.datetime.strptime(start, '%d/%m/%Y')
end_date = datetime.datetime.strptime(end, '%d/%m/%Y')
week = {}
for i in range((end_date - start_date).days):
day = calendar.day_name[(start_date + datetime.timedelta(days=i+1)).weekday()]
week[day] = week[day] + 1 if day in week else 1
return week

print(weekday_count("01/01/2017", "31/01/2017"))

# prints result
# {'Monday': 5, 'Tuesday': 5, 'Friday': 4, 'Wednesday': 4, 'Thursday': 4, 'Sunday': 5, 'Saturday': 4}


Related Topics



Leave a reply



Submit