|
#1
|
|
|
|
|
This is probably an easy question but I am trying to get at the number
of days that are in a month. I have this calendar that I have built, the idea being that when a month turns from February to March, for example, the calendar should redisplay itself properly formated showing the new month and the correct number of days. I have it so that it starts counting the days on the right day of the week, but I have to know when to stop counting. Any ideas, Thanks, -S |
|
|
|
#2
|
|
|
|
|
On Thu, Feb 28, 2008 at 01:17:22AM +0900, Shandy Nantz wrote:
> This is probably an easy question but I am trying to get at the number > of days that are in a month. I have this calendar that I have built, the > idea being that when a month turns from February to March, for example, > the calendar should redisplay itself properly formated showing the new > month and the correct number of days. I have it so that it starts > counting the days on the right day of the week, but I have to know when > to stop counting. Any ideas, Thanks, require 'date' def days_in_month(month, year) month = month.to_i year = year.to_i raise ArgumentError.new("invalid month") unless (1..12).to_a.include? month first = Date.parse sprintf("%04d%02d01", year, month) next_month = first + 32 (last - last.mday).mday end |
|
#3
|
|
|
|
|
On 27/02/2008, Shandy Nantz <shandybleu> wrote:
> > This is probably an easy question but I am trying to get at the number > of days that are in a month. I have this calendar that I have built, the > idea being that when a month turns from February to March, for example, > the calendar should redisplay itself properly formated showing the new > month and the correct number of days. I have it so that it starts > counting the days on the right day of the week, but I have to know when > to stop counting. Any ideas, Thanks, i have not completely understood your problem, but there is a gem call 'date_utils' which does various calendar calculations. See http://thopre.wordpress.com/2007/06/...e-week-200724/ for some examples! -Thomas --=20 Thomas Preymesser thopre thomas B=FCro: 030 - 830 353 88 mobil: 0176 - 75 03 03 04 Privat: 030 - 49 78 37 06 http://thopre.wordpress.com/ http://www.thopre.com/ |
|
#4
|
|
|
|
|
On Feb 27, 2008, at 11:17 AM, Shandy Nantz wrote:
> This is probably an easy question but I am trying to get at the number > of days that are in a month. I have this calendar that I have > built, the > idea being that when a month turns from February to March, for > example, > the calendar should redisplay itself properly formated showing the new > month and the correct number of days. I have it so that it starts > counting the days on the right day of the week, but I have to know > when > to stop counting. Any ideas, Thanks, <code> require "Date" d = Date.new(2008, 2, -1) d.day # => 29 </code> You can find the last day of a month by creating a Date object for day -1. Regards, Morton |
|
#5
|
|
|
|
|
On Feb 27, 11:40 am, Gregory Seidman <gsslist+r>
wrote: > On Thu, Feb 28, 2008 at 01:17:22AM +0900, Shandy Nantz wrote: > > require 'date' > > def days_in_month(month, year) > month = month.to_i > year = year.to_i > raise ArgumentError.new("invalid month") unless (1..12).to_a.include? month > first = Date.parse sprintf("%04d%02d01", year, month) > next_month = first + 32 > (last - last.mday).mday > end >> --Greg might want to try running that before posting |
|
#6
|
|
|
|
|
On Thu, Feb 28, 2008 at 02:49:54AM +0900, Brian Adkins wrote:
> On Feb 27, 11:40 am, Gregory Seidman <gsslist+r> > wrote: > > might want to try running that before posting Ah, details. Change the last line of the method to: (next_month + next_month.mday).mday Anyhow, it's worth noting that ActiveSupport includes Time.days_in_month. --Greg |
|
#7
|
|
|
|
|
On Feb 27, 11:17 am, Shandy Nantz <shandyb> wrote:
> This is probably an easy question but I am trying to get at the number > of days that are in a month. I have this calendar that I have built, the > idea being that when a month turns from February to March, for example, > the calendar should redisplay itself properly formated showing the new > month and the correct number of days. I have it so that it starts > counting the days on the right day of the week, but I have to know when > to stop counting. Any ideas, Thanks, require 'date' def days_in_month year, month ((month < 12) ? Date.new(year, month + 1) : Date.new(year + 1, 1)).-(1).mday end puts days_in_month(2008,2) # => 29 |
|
#8
|
|
|
|
|
On Feb 27, 12:07 pm, Morton Goldberg <m_goldb> wrote:
> On Feb 27, 2008, at 11:17 AM, Shandy Nantz wrote: >> <code> > require "Date" > d = Date.new(2008, 2, -1) > d.day # => 29 > </code> > > You can find the last day of a month by creating a Date object for > day -1. > > Regards, Morton And we have a winner :) I wish I had read your post before posting mine. I need to read the stdlib doc more carefully. |
|
#9
|
|
|
|
|
On Feb 27, 1:00 pm, Gregory Seidman <gsslist+r>
wrote: > On Thu, Feb 28, 2008 at 02:49:54AM +0900, Brian Adkins wrote: >> >> Ah, details. Change the last line of the method to: > > (next_month + next_month.mday).mday > > Anyhow, it's worth noting that ActiveSupport includes Time.days_in_month. > > --Greg You still didn't run it, did you? <sigh> Some ideas you may want to consider: 1) it's probably reasonable to expect numeric month and day arguments, so you can skip the .to_i calls 2) instead of creating a range, converting it to an array and calling include?, wouldn't it be better to just use a simple comparison such as "unless month > 0 && month < 13 3) sprintf'ing a date just to parse it is unnecessary & inefficient 4) it's still broken |
|
#10
|
|
|
|
|
On Thu, Feb 28, 2008 at 03:29:54AM +0900, Brian Adkins wrote:
> On Feb 27, 1:00 pm, Gregory Seidman <gsslist+r> > wrote: > > You still didn't run it, did you? <sigh> Don't sigh at me. I wrote some code off the cuff and fired it off. I also didn't include unit tests. Yes, it was buggy and inefficient, but it got across the approach I was using. > Some ideas you may want to consider: > 1) it's probably reasonable to expect numeric month and day arguments, > so you can skip the .to_i calls Given that it was for clarity, I think it's valuable. > 2) instead of creating a range, converting it to an array and calling > include?, wouldn't it be better to just use a simple comparison such > as "unless month > 0 && month < 13 Arguable. I prefer range inclusion to a pair of comparisons, but that's a matter of taste. The to_a only matters if I hadn't performed a to_i on the month argument previously. > 3) sprintf'ing a date just to parse it is unnecessary & inefficient True enough. Date.new (a.k.a. Date.civil) takes year, month, and day arguments. For that matter, as pointed out elsewhere in this thread, a -1 for the day argument gives the last day of the month, making the rest of the method moot. > 4) it's still broken Typo. The + should have been a - in the correction. The correct, if unnecessary, method is: require 'date' def days_in_month(month, year) month = month.to_i year = year.to_i raise ArgumentError.new("invalid month") unless (1..12).include? month first = Date.civil(year, month, 1) next_month = first + 32 (next_month - next_month.mday).mday end An even simpler method, taken from elsewhere in the thread: require 'date' def days_in_month(month, year) Date.civil(year, month, -1).mday end --Greg |
|
#11
|
|
|
|
|
Shandy Nantz wrote:
> This is probably an easy question but I am trying to get at the number > of days that are in a month. I have this calendar that I have built, the > idea being that when a month turns from February to March, for example, > the calendar should redisplay itself properly formated showing the new > month and the correct number of days. I have it so that it starts > counting the days on the right day of the week, but I have to know when > to stop counting. Any ideas, Thanks, > > -S > If you don't want to use the Date module, this is the plain old way: def days_in_month(m=Time.new.month,y=Time.new.year) return [31,0,31,30,31,30,31,31,30,31,30,31][m-1] unless m == 2 ((y % 4 == 0) and ( (!(y % 100 == 0)) or (y % 400 == 0) ) ) ? 29 : 28 end Dan |
|
#12
|
|
|
|
|
On Feb 27, 2008, at 2:17 PM, Gregory Seidman wrote:
> On Thu, Feb 28, 2008 at 03:29:54AM +0900, Brian Adkins wrote: > > Don't sigh at me. I wrote some code off the cuff and fired it off. I > also > didn't include unit tests. Yes, it was buggy and inefficient, but it > got > across the approach I was using. The point is applicable to *everyone*: "Don't present code that you haven't actually run unless you *say* that you haven't run it." You'll just end up confusing the OP or other readers that may benefit from the code. If you're trying to illustrate a point or an approach, say so or make it quite clear that your code is incomplete or intended as pseudo-code (particularly if it appears to be valid syntax). -Rob Rob Biedenharn http://agileconsultingllc.com Rob |
|
#13
|
|
|
|
|
Gregory Seidman wrote:
> Don't sigh at me. I wrote some code off the cuff and fired it off. I > also > didn't include unit tests. Yes, it was buggy and inefficient, but it got > across the approach I was using. > Thanks for caring, however this isn't a creative writing forum. |
|
#14
|
|
|
|
|
Rob Biedenharn wrote:
> > The point is applicable to *everyone*: > > "Don't present code that you haven't actually > run unless you *say* that you haven't run it." > Nah, better to let dubious code pop up now and then so that people are not lulled into a false sense of security, and will hopefully realize that, even if someone says they ran and tested the code and assure you it's fine, the code may still be bad. |
|
#15
|
|
|
|
|
On Wed, Feb 27, 2008 at 2:14 PM, Rob Biedenharn
<Rob> wrote: > The point is applicable to *everyone*: > > "Don't present code that you haven't actually > run unless you *say* that you haven't run it." > > You'll just end up confusing the OP or other readers that may benefit > from > the code. If you're trying to illustrate a point or an approach, say so > or make it quite clear that your code is incomplete or intended as > pseudo-code (particularly if it appears to be valid syntax). > > -Rob I frequently write bad code when I use a system where I cannot cut and paste. All code on a forum, IMHO, should be taken with a grain of salt. I don't think posted code needs to be perfect. 2c, Todd |
|
|
|
|
| Similar Threads | |
| Convert Number of Month to Number of days Hi, I am doing a small analysis, where I need to convert Number of Month into number of days. For E.g. 25 month = __ # days. To better understand. Date =... |
|
| Number of days in month counted from shortened name of month & yea I'd need to get the number of days in a month from the shortened name of month and a year. I have for example JAN in cell A1, and 2007 in cell A2, and I would need to get the... |
|
| how to get; number of days in a given month
|
|
| Number of Days in a Month Given a month/year is there a command that shows the number of days in that month please? |
|
| Number of Days in Month I have the following code: StartDate = (((Now() - Day(Now())) - Format(Now() - Day(Now()), "d"))) EndDate = (Now() - Day(Now())) DayCount = 0 Do While StartDate <... |
|
|
All times are GMT. The time now is 04:43 AM. | Privacy Policy
|