Time Compare

C

Cyrus Dev

Hello all

is there any direct comparison function in ruby or in rails for time

I need a function which compare current time is between 2 time objects
or not

...

Please help me

thanks in advance
 
B

badboy

Cyrus said:
Hello all

is there any direct comparison function in ruby or in rails for time

I need a function which compare current time is between 2 time objects
or not

...

Please help me

thanks in advance
my first solution would be to put the three time objects in an Array:
now = Time.now
timebefore = now - 30*60*60
timeafter = now + 30*60*60
timearray = [now, timebefore, timeafter]
and after that using
timearray.sort
to sort them. If now is between the two dates if should be on position 1
 
L

list. rb

[Note: parts of this message were removed to make it a legal post.]

now = Time.now
yesterday=now-1.day
tomorrow=now+1.day

is_between = true if now > yesterday and now < tomorrow

So.. you want to know if

Cyrus said:
Hello all

is there any direct comparison function in ruby or in rails for time

I need a function which compare current time is between 2 time objects
or not

...

Please help me

thanks in advance
my first solution would be to put the three time objects in an Array:
now = Time.now
timebefore = now - 30*60*60
timeafter = now + 30*60*60
timearray = [now, timebefore, timeafter]
and after that using
timearray.sort
to sort them. If now is between the two dates if should be on position 1
 
S

Siep Korteling

badboy said:
Cyrus said:
thanks in advance
my first solution would be to put the three time objects in an Array:
now = Time.now
timebefore = now - 30*60*60
timeafter = now + 30*60*60
timearray = [now, timebefore, timeafter]
and after that using
timearray.sort
to sort them. If now is between the two dates if should be on position 1

Or put the time objects in a range.

timeslot = (Time.now+1..Time.now+2)

# use like this:
4.times do
puts timeslot.include?(Time.now)
sleep 1
end

hth,

Siep
 
R

Robert Klemme

2009/1/17 list. rb said:
now = Time.now
yesterday=now-1.day
tomorrow=now+1.day

is_between = true if now > yesterday and now < tomorrow

Sorry for interrupting you, but this is not a safe idiom. Why?
Because of this: assuming someone had used "is_between" before then
chances are that the value is logical true (there are far more true
values than false values). If the date is not in between you still
retain the old value of x. Instead, rather do the assignment
unconditionally:

is_between = now > yesterday && now < tomorrow
is_between = now > yesterday and now < tomorrow

You can as well do

is_between = (yesterday..tomorrow).include? now

but this has a slightly different semantics because it will also be
true if your test time matches one of the boundaries.

Kind regards

robert
 
B

Brian Candler

Robert said:
is_between = now > yesterday and now < tomorrow

Danger danger!!!

irb(main):012:0> foo = 3 > 1 and 3 < 2
=> false
irb(main):013:0> foo
=> true

'and' and 'or' have lower precedence even than '=', so it's parsed as

(foo = 3 > 1) and (3 < 2)

The moral is: don't use these very-low precedence operators unless you
really know what you're doing. And even then, use parentheses to be
sure. Learned the hard way :)

Regards,

Brian.
 
B

Bertram Scharpf

Hi,

Am Dienstag, 27. Jan 2009, 17:20:13 +0900 schrieb Robert Klemme:
is_between = now > yesterday && now < tomorrow
is_between = now > yesterday and now < tomorrow

Sorry, Robert, but in the second case the binding is

(is_between = now > yesterday) and now < tomorrow

Or

irb(main):001:0> a,b,c=1,4,2
=> [1, 4, 2]
irb(main):002:0> i = b>a and b<c
=> false
irb(main):003:0> i
=> true

A common Ruby pitfall...

Bertram
 
P

Pascal J. Bourguignon

Brian Candler said:
Danger danger!!!

irb(main):012:0> foo = 3 > 1 and 3 < 2
=> false
irb(main):013:0> foo
=> true

'and' and 'or' have lower precedence even than '=', so it's parsed as

(foo = 3 > 1) and (3 < 2)

The moral is: don't use these very-low precedence operators unless you
really know what you're doing. And even then, use parentheses to be
sure. Learned the hard way :)

That's the second time today I notice that you are required to use
parentheses in Ruby (cf. m(arg){block}). Would that be a Lots of
Insipid and Stupid Parentheses language?

In anycase, I've got too small a brain to remember such rules, I put
parentheses everywhere.
 
R

Robert Klemme

2009/1/27 Brian Candler said:
Danger danger!!!

irb(main):012:0> foo = 3 > 1 and 3 < 2
=> false
irb(main):013:0> foo
=> true

'and' and 'or' have lower precedence even than '=', so it's parsed as

(foo = 3 > 1) and (3 < 2)

The moral is: don't use these very-low precedence operators unless you
really know what you're doing. And even then, use parentheses to be
sure. Learned the hard way :)

Thanks for the heads up! Originally I did not have the "and" version
in because I usually use the "&&" just because of the precedence issue
you mention. Somehow reading the other "and" version tricked my into
believing it would be safe here.

Mantra of the day: Always test! Always test! Always test! :)

Cheers

robert
 
B

Brian Candler

The moral is: don't use these very-low precedence operators unless you
That's the second time today I notice that you are required to use
parentheses in Ruby (cf. m(arg){block}). Would that be a Lots of
Insipid and Stupid Parentheses language?

Only if you had to use them all the time, and put them in the wrong
place :)
In anycase, I've got too small a brain to remember such rules, I put
parentheses everywhere.

That's always the safe bet.

You could argue that Ruby would have been a better language if 'and',
'or' and 'not' were removed completely. I wouldn't disagree, but it's
easy to avoid them when you know.

BTW, Perl has exactly the same problem too. Some of the following work,
and some don't. But because Perl doesn't make such wide use of
exceptions, this is a common idiom:

open FILE, "/etc/mot" or die "No such file";
open FILE, "/etc/mot" or die("No such file");
open FILE, "/etc/mot" || die "No such file";
open FILE, "/etc/mot" || die("No such file");
open(FILE, "/etc/mot") or die "No such file";
open(FILE, "/etc/mot") or die("No such file");
open(FILE, "/etc/mot") || die "No such file";
open(FILE, "/etc/mot") || die("No such file");
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,183
Messages
2,570,967
Members
47,517
Latest member
Andres38A1

Latest Threads

Top