[ruby-core:96389] [Ruby master Bug#16440] Date range inclusion behaviors are inconsistent

[email protected]
Newsgroups gmane.comp.lang.ruby.core
Message-ID <redmine.journal-83312.20191221150549.beb975f7c8a6980c@ruby-lang.org>
Issue #16440 has been updated by st0012 (Stan Lo).


To: wishdev (John Higgins)

> (and in fact on my system - the to_time option returns false instead of true).

Sorry that I accidentally tested my code in a Rails console instead of pure irb. The result for that case should be `false` on my machine as well.

Let me correct this:

```
may1 = Date.parse("2019-05-01")
may3 = Date.parse("2019-05-03")
noon_of_may3 = DateTime.parse("2019-05-03 12:00")
may31 = Date.parse("2019-05-31")

(may1..may31).include? may3 # => True
(may1..may31).include? may3.to_time # => False
(may1..may31).include? may3.to_datetime # => True
(may1..may31).include? noon_of_may3 # => False
```


To: zverok (Victor Shepelev) and  shevegen (Robert A. Heiler)

I think semantically, `cover` might be a better API for such cases. But I'm like `shevegen` don't use `cover` that often. In fact, I completely forgot about it!

However, I think my question of this issue is: 

Does a Date range represent a series of individual days between May 1st and May 31th, like `[2019-05-01 00:00:00, 2019-05-02 00:00:00..... 2019-05-31 00:00:00]` ? Or it represents a continuous time range that starts from May 1st's 00:00 to May 31th's 00:00?

If it's the first case, I can understand that `include?` doesn't return `true` for `noon_of_may3`. Because it's not at `00:00:00` of that day. But at the same time, I think it should return `true` for `(may1..may31).include? may3.to_time` as well because it's at `00:00:00` of that day.

```
may3.to_time #=> 2019-05-03 00:00:00 +0000
```

If it's the second case, we should make all 4 cases return `true` because they're all covered by the range.


What do you guys think?


----------------------------------------
Bug #16440: Date range inclusion behaviors are inconsistent
https://bugs.ruby-lang.org/issues/16440#change-83312

* Author: st0012 (Stan Lo)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
It's weird that a Date range can include Time and DateTime objects that were converted from a Date object. But it can't include a newly generated DateTime object. For example:

```
may1 = Date.parse("2019-05-01")
may3 = Date.parse("2019-05-03")
noon_of_may3 = DateTime.parse("2019-05-03 12:00")
may31 = Date.parse("2019-05-31")

(may1..may31).include? may3 # => True
(may1..may31).include? may3.to_time # => True
(may1..may31).include? may3.to_datetime # => True
(may1..may31).include? noon_of_may3 # => False
```

Shouldn't the last case return `true` as well? 

Related Rails issue: https://github.com/rails/rails/issues/36175



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.