哈哈..
我正在使用Chronic来解析用户在日历中添加的时间.在代码工作并实现正确时间的情况下,最终结果是,如果用户添加时间,则它没有日期,并且因为它没有日期,所以它不会显示在结果中.有任何想法吗?
def set_dates
unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank?
# check if we are dealing with a date or a date + time
if time_provided?(self.natural_date)
self.date = nil
self.time = Chronic.parse(self.natural_date)
else
self.date = Chronic.parse(self.natural_date).to_date
self.time = nil
end
end
unless self.natural_end_date.blank? || Chronic.parse(self.natural_end_date).blank?
# check if we are dealing with a date or a date + time
if time_provided?(self.natural_end_date)
self.end_date = nil
self.end_time = Chronic.parse(self.natural_end_date)
else
self.end_date = Chronic.parse(self.natural_end_date).to_date
self.end_time = nil
end
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:
这是time_provided?方法:
def time_provided?(natural_date_string)
date_span …Run Code Online (Sandbox Code Playgroud) 我正在使用慢性来获得任何一年的最后一个星期日.它很乐意给我第n个星期天,但不是最后一个星期天.
这有效,但不是我需要的:
Chronic.parse('4th sunday in march', :now => Time.local(2015,1,1))
Run Code Online (Sandbox Code Playgroud)
这是我需要的,但不起作用:
Chronic.parse('last sunday in march', :now => Time.local(2015,1,1))
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个明显的限制?
更新:我正在推测下面的两个答案,因为它们都很好,但我已经在"纯Ruby"中实现了这个(在2行代码中除了require 'date'行之外),但我试图向管理层演示Ruby是用来替换正在消失的Java代码库的正确语言(并且有几十行代码来计算它),我告诉一位经理我可能会在一行Ruby中做到这一点,而且它是可读的,易于维护.
这些错误意味着什么?
[root@localhost config]# gem install bluecloth
Building native extensions. This could take a while...
ERROR: Error installing bluecloth:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb
can't find header files for ruby.
Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/bluecloth-2.0.7 for
inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/bluecloth-2.0.7/ext/gem_make.out
[root@localhost config]#
Run Code Online (Sandbox Code Playgroud)
还有这个
[root@localhost config]# gem install chronic
Successfully installed json_pure-1.4.3
Successfully installed rubyforge-2.0.4
Successfully installed hoe-2.6.0
Successfully installed chronic-0.2.3
4 gems installed
/usr/lib64/ruby/gems/1.8/gems/rdoc-2.5.8/lib/rdoc/ruby_lex.rb:67: warning:
parenthesize argument(s) for future version
ERROR: While executing gem …Run Code Online (Sandbox Code Playgroud) 我需要慢慢地告诉我,日期的格式是天 - 月 - 年可能吗?我传给慢性病的数据也可能是今天/昨天/ 2天前的文字.
目前慢性病给了我2 Dec 2010而不是12 Feb 2010来自12-02-2010
我能想到的唯一解决方案是在将字符串传递给慢性字符之前交换日期和月份.
require 'chronic'
puts "12-02-2010 = #{Chronic.parse('12-02-2010')}" #should be 12 Feb 2010
puts "yesteday = #{Chronic.parse('yesterday')}" #working ok
puts "Today = #{Chronic.parse('today')}" #working ok
Run Code Online (Sandbox Code Playgroud)