Ruby:将时间和星期几应用于 DateTime

Ruby: Apply time and day of week to a DateTime

问题:

获取 DateTime 对象 "A" 并应用另一个 DateTime 对象 "B" 的星期几和时间的最简单方法是什么,这样我就有了一个新的 DateTime 对象,它位于 DateTime 的那一周对象 "A" 但具有 DateTime 对象 "B"?

的星期几和时间

一些上下文:

我正在创建一个日程安排应用程序,用户可以在其中进行定期约会。所有用户都以 DateTime 对象的形式设置他们的默认星期几和时间(我将其保存为 DateTime 但实际上我并不关心日期本身)。

当我想延长他们的定期约会(例如再延长 6 个月)时,我需要获取他们上次约会的那一周,跳转到该周内的默认星期几和时间,然后从那里延长。

require 'date'

def new_date_time(a,b)
  a_date = a.to_date
  new_date = a_date + (b.to_date.wday - a_date.wday)
  DateTime.new(new_date.year, new_date.month, new_date.day,
    b.hour, b.minute, b.second)
end

a = DateTime.new(2015,8,6,4,5,6) # Thursday
  #=> #<DateTime: 2015-08-06T04:05:06+00:00 ((2457241j,14706s,0n),+0s,2299161j)> 
b = DateTime.new(2015,8,3,13,21,16) # Monday
new_date_time(a,b)
  #=> #<DateTime: 2015-08-03T13:21:16+00:00 ((2457238j,48076s,0n),+0s,2299161j)> 

b = DateTime.new(2015,11,17,13,21,16) # Tuesday
new_date_time(a,b)
  #=> #<DateTime: 2015-08-04T13:21:16+00:00 ((2457239j,48076s,0n),+0s,2299161j)>