Ruby函数格式化日期

时间:2015-07-06 08:18:29

标签: ruby date methods format

我需要协助格式化日期字符串。我有一个JSON对象,其中包含元素" start_date"和" end_date"。这些元素包含字符串中的日期信息,如:

"2015-07-15"

我创建了这个方法来格式化我的start_date和end_date:

def format_date(date)
  date.to_time.strftime('%b %d')
end

此方法的作用是将日期格式化为以下格式:

"Jul 15" 

此方法可帮助我将start_date和end_date打印到表单中:

"Jul 15 to Jul 27" 

我想要的是将我的日期格式化为:

"15 - 27 July 2015" #If the two dates fall within the same month

"15 July - 27 Aug 2015" #If the two dates fall into separate months

有人可以帮我写这种红宝石方法吗?

2 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

def format_date(date1, date2)

  # convert the dates to time
  date1 = date1.to_time
  date2 = date2.to_time

  # Ensure date1 is the lowest
  if date1 > date2
    date1, date2 = date2, date1
  end

  # handle identical dates
  if date1 == date2
    return date1.strftime('%d %b %Y')
  end

  # handle same year
  if date1.year == date2.year

    #handle same month
    if date1.month == date2.month
      return "#{date1.strftime('%d')} - #{date2.strftime('%d %b %Y')}"

    # handle different month
    else
      return "#{date1.strftime('%d %b')} - #{date2.strftime('%d %b %Y')}"
    end
  end

  # handle different date-month-year
  return "#{date1.strftime('%d %b %Y')} - #{date2.strftime('%d %b %Y')}"
end

我从这开始,并将其重构为更具可读性和可用性的东西。

答案 1 :(得分:0)

我认为你可以使用formatted_times gem

https://rubygems.org/gems/formatted_times/versions/0.0.4

它可以帮助您根据您的要求格式化日期