如何仅从 rails 中的数组中的日期获取时间

how to take only times from dates inside array in rails

所以...我需要从 Array

中的日期中获取时间

例如我有一个这样的数组

    a = [
     Thu, 17 Mar 2022 10:00:00.000000000 KST +09:00,
     Thu, 17 Mar 2022 10:00:00.000000000 KST +09:00,
     Thu, 17 Mar 2022 14:00:00.000000000 KST +09:00,
     Thu, 17 Mar 2022 14:00:00.000000000 KST +09:00,
     Thu, 17 Mar 2022 17:00:00.000000000 KST +09:00]

并希望获得

的结果
a = ["10:00", "10:00", "14:00", "14:00", "17:00"]

所以我在尝试这个

can_choose =[];

a.each_with_index do |time| strftime("%H:%M")
can_choose <<|time|

但根本不起作用...

我应该在哪里修复?

同样的方法也可以提取年月日 https://ruby-doc.org/stdlib-3.1.1/libdoc/date/rdoc/Date.html

a = [
'Thu, 17 Mar 2022 10:00:00.000000000 KST +09:00',
'Thu, 17 Mar 2022 10:00:00.000000000 KST +09:00',
'Thu, 17 Mar 2022 14:00:00.000000000 KST +09:00',
'Thu, 17 Mar 2022 14:00:00.000000000 KST +09:00',
'Thu, 17 Mar 2022 17:00:00.000000000 KST +09:00']


can_choose =[]
a.map do |time|
 t = DateTime.parse(time)
 can_choose << t.strftime("%k:%M")
end 

p can_choose

=> ["10:00", "10:00", "14:00", "14:00", "17:00"]                     

Ruby 都是关于消息传递的。发送消息的语法是:

receiver.message(argument)

strftime就是这样的消息,但它需要一个合适的接收者。因此,如果您有一些 Time 实例,例如:

time = Time.parse('2022-03-17 10:00:00 +0900')

你会写:

time.strftime('%H:%M') #=> "10:00"

其中 time 是接收者,strftime 是消息,'%H:%M' 是参数。

您可以像这样在 each 循环中使用上面的代码:

can_choose = []

a.each do |time|
  can_choose << time.strftime('%H:%M')
end

或者您可以使用 map 将数组转换为另一个数组:

can_choose = a.map { |time| time.strftime('%H:%M') }

这里的大括号{ ... }相当于上面的do ... end

我会简单地选择:

can_choose = a.map { |datetime| datetime.strftime('%H:%M') }

如果您只需要 24 小时格式的小时和分钟,只需使用 %R 指令和 Time#strftime or DateTime#strftime

can_choose = a.map { |time| time.strftime('%R') }