Nisanio
Nisanio

Reputation: 4081

How can I calculate the day of the week of a date in ruby?

How can I calculate the day of the week of a date in Ruby? For example, October 28 of 2010 is = Thursday

Upvotes: 69

Views: 87640

Answers (12)

Abdullah Fadhel
Abdullah Fadhel

Reputation: 310

you can use #name_of_week_day method like this:

Date.today.name_of_week_day

Upvotes: -2

Yaroslav Liakh
Yaroslav Liakh

Reputation: 11

From 2022:

DateTime.current.thursday?

Based on https://apidock.com/ruby/Date/tuesday%3F

And

> DateTime.current.is_a? Date
 => true

Upvotes: 1

alilland
alilland

Reputation: 2572

basically the same answer as Andreas

days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
today_is = days[Time.now.wday]

if today_is == 'tuesday'
  ## ...
end

Upvotes: -1

mway
mway

Reputation: 4392

Take a look at the Date class reference. Once you have a date object, you can simply do dateObj.strftime('%A') for the full day, or dateObj.strftime('%a') for the abbreviated day. You can also use dateObj.wday for the integer value of the day of the week, and use it as you see fit.

Upvotes: 76

brian_d
brian_d

Reputation: 11360

time = Time.at(time)    # Convert number of seconds into Time object.
puts time.wday    # => 0: Day of week: 0 is Sunday

Upvotes: 33

Andreas Bergström
Andreas Bergström

Reputation: 14610

Quick, dirty and localization-friendly:

days = {0 => "Sunday",
1 => "Monday", 
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday"}

puts "It's #{days[Time.now.wday]}"

Upvotes: 10

Niels Kristian
Niels Kristian

Reputation: 8825

Works out of the box with ruby without requiring:

Time.now.strftime("%A").downcase #=> "thursday"

Upvotes: 7

Abhi
Abhi

Reputation: 3611

Date.today.strftime("%A")
=> "Wednesday"

Date.today.strftime("%A").downcase  
=> "wednesday"

Upvotes: 32

steenslag
steenslag

Reputation: 80065

I have used this because I hated to go to the Date docs to look up the strftime syntax, not finding it there and having to remember it is in the Time docs.

require 'date'

class Date
  def dayname
     DAYNAMES[self.wday]
  end

  def abbr_dayname
    ABBR_DAYNAMES[self.wday]
  end
end

today = Date.today

puts today.dayname
puts today.abbr_dayname

Upvotes: 74

Saqib R.
Saqib R.

Reputation: 3069

Say i have date = Time.now.to_date then date.strftime("%A") will print name for the day of the week and to have just the number for the day of the week write date.wday.

Upvotes: 5

Adam Tanner
Adam Tanner

Reputation: 917

As @mway said, you can use date.strftime("%A") on any Date object to get the day of the week.

If you're lucky Date.parse might get you from String to day of the week in one go:

def weekday(date_string)
  Date.parse(date_string).strftime("%A")
end

This works for your test case:

weekday("October 28 of 2010") #=> "Thursday"

Upvotes: 5

George Johnston
George Johnston

Reputation: 32258

In your time object, use the property .wday to get the number that corresponds with the day of the week, e.g. If .wday returns 0, then your date is Sunday, 1 Monday, etc.

Upvotes: 2

Related Questions