2008-06-25

ruby 日期

关键字: ruby time
difference = Time.now - time
    seconds    =  difference % 60
    difference = (difference - seconds) / 60
    minutes    =  difference % 60
    difference = (difference - minutes) / 60
    hours      =  difference % 24
    difference = (difference - hours)   / 24
    days       =  difference % 7
    difference = (difference - days)    /  7
    weeks      =  difference % 4
    difference = (difference - weeks)   / 4
    months     =  difference % 12
    years      = (difference - months)  / 12

puts "(#{years} years , #{months} months ,#{weeks} weeks, #{days} days, #{hours}:#{minutes}:#{seconds})"



rail 实现

def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
        from_time = from_time.to_time if from_time.respond_to?(:to_time)
        to_time = to_time.to_time if to_time.respond_to?(:to_time)
        distance_in_minutes = (((to_time - from_time).abs)/60).round
        distance_in_seconds = ((to_time - from_time).abs).round

        case distance_in_minutes
          when 0..1
            return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
            case distance_in_seconds
              when 0..4   then 'less than 5 seconds'
              when 5..9   then 'less than 10 seconds'
              when 10..19 then 'less than 20 seconds'
              when 20..39 then 'half a minute'
              when 40..59 then 'less than a minute'
              else             '1 minute'
            end

          when 2..44           then "#{distance_in_minutes} minutes"
          when 45..89          then 'about 1 hour'
          when 90..1439        then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
          when 1440..2879      then '1 day'
          when 2880..43199     then "#{(distance_in_minutes / 1440).round} days"
          when 43200..86399    then 'about 1 month'
          when 86400..525599   then "#{(distance_in_minutes / 43200).round} months"
          when 525600..1051199 then 'about 1 year'
          else                      "over #{(distance_in_minutes / 525600).round} years"
        end
      end


中文实现:
  #相对现在来格式化时间
  def time_ago_in_words_zh(from_time, include_seconds = false)
    distance_of_time_in_words(from_time,Time.now,include_seconds)
  end
  
  def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
    from_time = from_time.to_time if from_time.respond_to?(:to_time)
    to_time = to_time.to_time if to_time.respond_to?(:to_time)
    distance_in_minutes = (((to_time - from_time).abs)/60).round
    distance_in_seconds = ((to_time - from_time).abs).round

    case distance_in_minutes
      when 0..1
        return ' 1 分钟' unless include_seconds
        case distance_in_seconds
          when 0..4   then ' 5 秒'
          when 5..9   then ' 10 秒'
          when 10..19 then ' 20 秒'
          when 20..39 then ' 半分钟'
          else             ' 1 分钟'
        end

      when 2..44           then " #{distance_in_minutes} 分钟"
      when 45..1439        then " #{(distance_in_minutes.to_f / 60.0).round} 小时"
      when 1440..2879      then ' 昨天'
      when 2880..4319      then ' 前天'
      when 4320..43199     then " #{(distance_in_minutes / 1440).round} 天"
      when 43200..525599   then " #{(distance_in_minutes / 43200).round} 个月"
      else                      " #{(distance_in_minutes / 525600).round} 年"
    end
  end
评论
发表评论

您还没有登录,请登录后发表评论

xu_wccq
搜索本博客
我的相册
Ac7ad940-edbc-3b23-8443-5fe2ea338061-thumb
productcenter.bmp
共 2 张
最近加入圈子
存档
最新评论