I'm creating a calendar of sorts which maps events.
For each event, I know its start and end date/time. I also know the
current date and time. What I need to be able to do is calculate the
start of the week, regardless of the day of the week.
So, if it is Wednesday and I want to populate my Calendar from Monday -
Sunday with the events, I need to know the date of Monday to start. To
compare absolute days I've converted them to Ruby epoch with the idea of
comparing each day (84600 seconds) versus the end date. If the day is
greater than the end date, I then check the hours of the day to see on
what hour the event occurred.
It sounds convoluted, but I'm not sure of a better method.
Code:
This is wrong in that I'm using Date.today.to_time.to_i, rather than the
date of the Monday of the week.
<% for j in 0..6 do %>
<%# check date first if we are past day, then check
hour%>
<% for i in 0..23 do %>
<th><%=h i %>:00</th>
<% if (j * 86400) + Date.today.to_time.to_i >
(@lab.end_date.to_time.to_i + ((@lab.end_time.strftime("%M").to_i) *
3600)
+ ((@lab.end_time.strftime("%S").to_i) *
60)) %>
<tr>
<% if i >
@lab.end_time.strftime("%M").to_i # because db stores the hour in minute
field (as pulled by ruby) use %M %>
<th> Available </th>
<% else %>
<th> Checked Out </th>
<% end %>
<% end %>
<% else %>
<th> Checked Out </th>
<% end %>
<% end %>
I'm creating a calendar of sorts which maps events.
For each event, I know its start and end date/time. I also know the
current date and time. What I need to be able to do is calculate the
start of the week, regardless of the day of the week.
So, if it is Wednesday and I want to populate my Calendar from Monday -
Sunday with the events, I need to know the date of Monday to start. To
compare absolute days I've converted them to Ruby epoch with the idea of
comparing each day (84600 seconds) versus the end date. If the day is
greater than the end date, I then check the hours of the day to see on
what hour the event occurred.
The code posted is wrong (pulled from a backup file), but I think I see
a way to address the problem. If I know the current day of the week, I
can find Monday and subtract off for each day of the week past Monday.
I just needed to walk away from the problem for a bit to figure it out.
Not sure if this is what you're looking for, but if you wanted to find
the prev Mon and next Sun for some given date/time for use in querying/
comparing, you could do something like:
I'm creating a calendar of sorts which maps events.
For each event, I know its start and end date/time. I also know the
current date and time. What I need to be able to do is calculate the
start of the week, regardless of the day of the week.
So, if it is Wednesday and I want to populate my Calendar from
Monday -
Sunday with the events, I need to know the date of Monday to start.
To
compare absolute days I've converted them to Ruby epoch with the
idea of
comparing each day (84600 seconds) versus the end date. If the day is
greater than the end date, I then check the hours of the day to see on
what hour the event occurred.
Why won't this work?
>> t = Time.now
=> Wed May 20 18:23:37 -0700 2009
>> t.beginning_of_week
=> Mon May 18 00:00:00 -0700 2009
There are all kinds of fun methods in the Time class...
and then back off a week. You could also take the code and create your
own method like the beginning_of_week if it doesn't already do exactly
what you want.
I guess I didn't make my point very well. (Even I can't see it from what I actually *wrote*.)
The Time#next_week in ActiveSupport lets you specify the day that starts the week while Time#beginning_of_week always goes back to Monday. My reference to Time#beginning_of_week was perhaps a bit too implicit and I suppose I was relying on the clairvoyance of the OP for the point about choosing when the "week" begins.