Method: When::TM::DateAndTime#floor

Defined in:
lib/when_exe/tmptypes.rb

#floor(digit = DAY, precision = digit) ⇒ When::TM::DateAndTime

下位桁の切り捨て

Parameters:

  • digit (Integer) (defaults to: DAY)

    切り捨てずに残す、最下位の桁

  • precision (Integer) (defaults to: digit)

    切り捨て結果の分解能

Returns:



1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
# File 'lib/when_exe/tmptypes.rb', line 1061

def floor(digit=DAY, precision=digit)
  count    = digit - clock.indices.length

  if digit>=DAY
    date     = @cal_date.dup
  elsif @calendar_era_props
    date     = @cal_date.dup
    date[0] += calendar_era_epoch
    date     = @frame._validate(date[0..(digit-1)])
    date[0] -= calendar_era_epoch
  else
    date     = @frame._validate(@cal_date[0..(digit-1)])
  end

  time     = @clk_time.clk_time[0..((digit<=DAY) ? 0 : ((count>=0) ? -1 : digit))]
  time[0] += to_i
  time     = clock._validate(time)
  time[0] -= to_i

  if (count >= 0)
    factor = 10**count
    time[-1] = (time[-1] * factor).floor.to_f / factor
  end

  # オブジェクトの生成
  options = {:date=>date, :validate=>:done, :events=>nil, :query=>nil,
             :time=>(digit<=DAY) ? time : @clk_time.dup._copy({:time=>time})}
  options[:precision] = precision if precision
  return self.dup._copy(options)
end