我有一个时间戳'2016-02-08 16:23:53'
和一个包含不同时间戳['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53']
的数组。
检查值是否小于数组中的任何值并返回true
或false
的最简单方法是什么?
答案 0 :(得分:6)
如果时间戳是字符串:
['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53'].none? do |ts|
Time.parse(ts) > Time.parse('2016-02-08 16:23:53')
end
如果时间戳已经是Time
的实例,则无需parse
:
timestamps_array.none? do |ts|
ts > Time.parse('2016-02-08 16:23:53')
end
好吧,为了@ sawa的耐心:)
在循环中解析每次比较的值是低效的:
timestamp_to_check = Time.parse('2016-02-08 16:23:53')
['2016-02-09 14:23:53', '2015-02-08 16:23:53', '2016-02-08 16:22:53'].none? do |ts|
Time.parse(ts) > timestamp_to_check
end
答案 1 :(得分:5)
检查值是否小于数组中的任何值可以在Ruby中用
完成value < array_of_values.min
解决OP给出的示例的最简单方法是
'2016-02-08 16:23:53' < ['2016-02-09 14:23:53',
'2015-02-08 16:23:53',
'2016-02-08 16:22:53'].min
比较日期和时间的字符串表示只有在涉及的所有字符串使用相同的格式时才会有效,数字按从大到小的顺序排列(年数下降到秒),数字使用前导零。
使用适当的数据类型(如 Time 或 DateTime )而不是字符串来存储和处理日期和时间将提高软件的稳健性。