我有一个时间戳'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?的最简单方法是什么?
如果时间戳是字符串:
['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
Run Code Online (Sandbox Code Playgroud)
如果时间戳已经是实例Time,则不需要parse:
timestamps_array.none? do |ts|
ts > Time.parse('2016-02-08 16:23:53')
end
Run Code Online (Sandbox Code Playgroud)
好吧,为了@ 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
Run Code Online (Sandbox Code Playgroud)
检查值是否小于数组中的任何值可以在Ruby中完成
value < array_of_values.min
Run Code Online (Sandbox Code Playgroud)
解决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
Run Code Online (Sandbox Code Playgroud)
比较日期和时间的字符串表示只有在涉及的所有字符串使用相同的格式时才会起作用,数字按从大到小的顺序排列(年数下降到秒),数字使用前导零.
使用适当的数据类型(如Time或DateTime)而不是字符串来存储和处理日期和时间将提高软件的稳健性.