diff --git a/lib/chronic/chronic.rb b/lib/chronic/chronic.rb index c8233d3..29726b2 100644 --- a/lib/chronic/chronic.rb +++ b/lib/chronic/chronic.rb @@ -188,7 +188,6 @@ def definitions(options={}) Handler.new([:scalar_day, :repeater_month_name, :scalar_year, :separator_at?, 'time?'], :handle_sd_rmn_sy), Handler.new([:scalar_day, :repeater_month_name, :separator_at?, 'time?'], :handle_sd_rmn), Handler.new([:scalar_year, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sy_sm_sd), - Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day], :handle_sm_sd), Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_year], :handle_sm_sy), Handler.new([:scalar_day, :separator_slash_or_dash, :repeater_month_name, :separator_slash_or_dash, :scalar_year], :handle_sm_rmn_sy) ], @@ -216,6 +215,8 @@ def definitions(options={}) endians = [ Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sm_sd_sy), + Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sm_sd), + Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_at?, 'time?'], :handle_sd_sm), Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sd_sm_sy) ] diff --git a/lib/chronic/handlers.rb b/lib/chronic/handlers.rb index b754649..6e0c3d9 100644 --- a/lib/chronic/handlers.rb +++ b/lib/chronic/handlers.rb @@ -224,27 +224,30 @@ def handle_sy_sm_sd(tokens, options) handle_sm_sd_sy(new_tokens + time_tokens, options) end - # Handle scalar-day/scalar-month AND scalar-month/scalar-day + # Handle scalar-month/scalar-day def handle_sm_sd(tokens, options) month = tokens[0].get_tag(ScalarMonth).type day = tokens[1].get_tag(ScalarDay).type year = Chronic.now.year - - if Array(options[:endian_precedence]).first == :little - day, month = month, day - end + time_tokens = tokens.last(tokens.size - 2) return if month_overflow?(year, month, day) begin - start_time = Chronic.time_class.local(year, month, day) - end_time = Chronic.time_class.local(year, month, day + 1) - Span.new(start_time, end_time) + day_start = Chronic.time_class.local(year, month, day) + day_or_time(day_start, time_tokens, options) rescue ArgumentError nil end end + # Handle scalar-day/scalar-month + def handle_sd_sm(tokens, options) + new_tokens = [tokens[1], tokens[0]] + time_tokens = tokens.last(tokens.size - 2) + handle_sm_sd(new_tokens + time_tokens, options) + end + # Handle scalar-month/scalar-year def handle_sm_sy(tokens, options) month = tokens[0].get_tag(ScalarMonth).type diff --git a/test/test_chronic.rb b/test/test_chronic.rb index ab4c81b..325c1bd 100644 --- a/test/test_chronic.rb +++ b/test/test_chronic.rb @@ -67,6 +67,8 @@ def test_endian_definitions # middle, little endians = [ Chronic::Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sm_sd_sy), + Chronic::Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sm_sd), + Chronic::Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_at?, 'time?'], :handle_sd_sm), Chronic::Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sd_sm_sy) ]