Project

General

Profile

Bug #15712

DateTime#=== should be defined and compare date and time instead of just the date

Added by localhostdotdev (localhost .dev) 9 months ago. Updated 9 months ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0dev (2019-03-18 trunk 67296) [x86_64-darwin17]

Description

DateTime#=== is inherited from Date#=== without overwriting the #=== method, this leads to DateTime#=== comparing only dates and ignore the time part.

DateTime.new(2001, 2, 3) === DateTime.new(2001, 2, 3, 12)
=> false

I think this is not the expected behavior but existing code might rely on this.

Date#===: https://ruby-doc.org/stdlib-2.1.9/libdoc/date/rdoc/Date.html#method-i-3D-3D-3D

Source: https://medium.com/@dvandersluis/an-rspec-time-issue-and-its-not-about-timezones-a89bbd167b86

History

Updated by hsbt (Hiroshi SHIBATA) 9 months ago

localhostdotdev (localhost .dev)

I fixed an issue of our tracker. I deleted 15713-15716.

Updated by nobu (Nobuyoshi Nakada) 9 months ago

  • Status changed from Open to Feedback

What version of DateTime do you use?

With the trunk I got:

require 'date'
dt1 = DateTime.new(2001, 2, 3)
dt2 = DateTime.new(2001, 2, 3, 12)
p dt1 === dt2 #=> true
p dt1 == dt2  #=> false

Updated by localhostdotdev (localhost .dev) 9 months ago

nobu (Nobuyoshi Nakada) Not sure why I wrote false (maybe I confused === with == in my testing), I'm getting true on ruby 2.5.3, 2.6.1, 2.6.2 and ruby-head (2.7.0 (same as the one registered in the issue)).

rvm ruby-head do ruby -e 'require "date"; dt1 = DateTime.new(2001, 2, 3); dt2 = DateTime.new(2001, 2, 3, 12); puts "=== #{dt1 === dt2}"; puts "== #{dt1 == dt2 }"; puts RUBY_VERSION'

Also available in: Atom PDF