method
+
Related methods
- Class methods (100)
- ajd_to_amjd (<= v1_8_7_330)
- ajd_to_jd (<= v1_8_7_330)
- amjd_to_ajd (<= v1_8_7_330)
- civil
- civil_to_jd (<= v1_8_7_330)
- commercial
- commercial_to_jd (<= v1_8_7_330)
- complete_frags (<= v1_9_2_180)
- day_fraction_to_time (<= v1_8_7_330)
- deprecated_alias (<= v1_8_7_330)
- deprecated_class_method_alias (<= v1_8_7_330)
- fix_style (<= v1_8_7_330)
- gregorian? (<= v1_8_7_330)
- gregorian_leap?
- httpdate
- _httpdate
- iso8601
- _iso8601
- jd
- jd_to_ajd (<= v1_8_7_330)
- jd_to_civil (<= v1_8_7_330)
- jd_to_commercial (<= v1_8_7_330)
- jd_to_ld (<= v1_8_7_330)
- jd_to_mjd (<= v1_8_7_330)
- jd_to_ordinal (<= v1_8_7_330)
- jd_to_wday (<= v1_8_7_330)
- jd_to_weeknum (<= v1_8_7_330)
- jisx0301
- _jisx0301
- json_create
- julian? (<= v1_8_7_330)
- julian_leap?
- ld_to_jd (<= v1_8_7_330)
- leap?
- _load (>= v1_8_6_287)
- mjd_to_jd (<= v1_8_7_330)
- new
- new! (>= v1_9_1_378)
- new_by_frags (<= v1_9_2_180)
- now (<= v1_9_2_180)
- nth_kday (>= v1_9_1_378)
- num_pattern? (<= v1_9_2_180)
- once (<= v1_9_2_180)
- ordinal
- ordinal_to_jd (<= v1_8_7_330)
- parse
- _parse
- _parse_beat (<= v1_8_6_287)
- _parse_day (<= v1_9_2_180)
- _parse_ddd (<= v1_9_2_180)
- _parse_dot (<= v1_9_2_180)
- _parse_eu (<= v1_9_2_180)
- _parse_iso (<= v1_9_2_180)
- _parse_iso2 (<= v1_9_2_180)
- _parse_jis (<= v1_9_2_180)
- _parse_mday (<= v1_9_2_180)
- _parse_mon (<= v1_9_2_180)
- _parse_sla (<= v1_9_2_180)
- _parse_sla_eu (<= v1_8_6_287)
- _parse_sla_ja (<= v1_8_6_287)
- _parse_sla_us (<= v1_8_6_287)
- _parse_time (<= v1_9_2_180)
- _parse_us (<= v1_9_2_180)
- _parse_vms (<= v1_9_2_180)
- _parse_year (<= v1_9_2_180)
- rewrite_frags (<= v1_9_2_180)
- rfc2822
- _rfc2822
- rfc3339
- _rfc3339
- rfc822
- _rfc822
- s3e (<= v1_9_2_180)
- strptime
- _strptime
- _strptime_i (<= v1_9_2_180)
- test_all (>= v2_6_3)
- test_civil (>= v2_6_3)
- test_commercial (>= v2_6_3)
- test_nth_kday (>= v2_6_3)
- test_ordinal (>= v2_6_3)
- test_unit_conv (>= v2_6_3)
- test_weeknum (>= v2_6_3)
- time_to_day_fraction (<= v1_8_7_330)
- today
- valid_civil?
- valid_commercial?
- valid_date?
- valid_date_frags? (<= v1_9_2_180)
- valid_jd?
- valid_nth_kday? (<= v1_9_2_180)
- valid_ordinal?
- valid_time? (<= v1_9_2_180)
- valid_time_frags? (<= v1_9_2_180)
- valid_weeknum? (<= v1_9_2_180)
- weeknum (>= v1_8_6_287)
- weeknum_to_jd (<= v1_8_7_330)
- xmlschema
- _xmlschema
- zone_to_diff (<= v1_8_7_330)
- Instance methods (167)
- <<
- <=>
- == (<= v1_9_2_180)
- ===
- >>
- -
- -@ (<= v1_9_2_180)
- / (<= v1_9_2_180)
- * (<= v1_9_2_180)
- ** (<= v1_9_2_180)
- % (<= v1_9_2_180)
- +
- +@ (<= v1_9_2_180)
- abs (<= v1_9_2_180)
- ajd
- ajd_to_amjd (<= v1_9_2_180)
- ajd_to_jd (<= v1_9_2_180)
- amjd
- amjd_to_ajd (<= v1_9_2_180)
- asctime
- as_json
- ceil (<= v1_9_2_180)
- civil (<= v1_9_2_180)
- civil_to_jd (<= v1_9_2_180)
- coerce (<= v1_9_2_180)
- commercial (<= v1_9_2_180)
- commercial_to_jd (<= v1_9_2_180)
- ctime
- cwday
- cweek
- cwyear
- day
- day_fraction
- day_fraction_to_time (<= v1_9_2_180)
- div (<= v1_9_2_180)
- divmod (<= v1_9_2_180)
- downto
- _dump (<= v1_8_7_330)
- dx_addsub (<= v1_9_2_180)
- dx_conv0 (<= v1_9_2_180)
- dx_conv1 (<= v1_9_2_180)
- dx_muldiv (<= v1_9_2_180)
- emit (<= v1_9_2_180)
- emit_a (<= v1_9_2_180)
- emit_ad (<= v1_9_2_180)
- emit_au (<= v1_9_2_180)
- emit_n (<= v1_9_2_180)
- emit_sn (<= v1_9_2_180)
- emit_w (<= v1_9_2_180)
- emit_z (<= v1_9_2_180)
- england
- eql?
- fill (>= v2_6_3)
- find_fdom (<= v1_9_2_180)
- find_fdoy (<= v1_9_2_180)
- find_ldom (<= v1_9_2_180)
- find_ldoy (<= v1_9_2_180)
- fix_style (<= v1_9_2_180)
- floor (<= v1_9_2_180)
- friday?
- gregorian
- gregorian?
- hash
- hour
- httpdate
- initialize_copy
- inspect
- inspect_raw (>= v2_6_3)
- integer? (<= v1_9_2_180)
- iso8601
- italy
- jd
- jd_to_ajd (<= v1_9_2_180)
- jd_to_civil (<= v1_9_2_180)
- jd_to_commercial (<= v1_9_2_180)
- jd_to_ld (<= v1_9_2_180)
- jd_to_mjd (<= v1_9_2_180)
- jd_to_nth_kday (<= v1_9_2_180)
- jd_to_ordinal (<= v1_9_2_180)
- jd_to_wday (<= v1_9_2_180)
- jd_to_weeknum (<= v1_9_2_180)
- jisx0301
- julian
- julian?
- ld
- ld_to_jd (<= v1_9_2_180)
- leap?
- marshal_dump
- marshal_dump_old (>= v2_6_3)
- marshal_load
- mday
- min
- minute
- mjd
- mjd_to_jd (<= v1_9_2_180)
- modulo (<= v1_9_2_180)
- mon
- monday?
- month
- new_offset
- new_start
- next
- next_day
- next_month
- next_year
- nth_kday? (>= v1_9_1_378)
- nth_kday_to_jd (<= v1_9_2_180)
- offset
- ordinal (<= v1_9_2_180)
- ordinal_to_jd (<= v1_9_2_180)
- prev_day
- prev_month
- prev_year
- quo (<= v1_9_2_180)
- quotient (<= v1_9_2_180)
- quotrem (<= v1_9_2_180)
- remainder (<= v1_9_2_180)
- rfc2822
- rfc3339
- rfc822
- round (<= v1_9_2_180)
- saturday?
- sec
- sec_fraction
- second
- second_fraction
- start
- step
- strftime
- succ
- sunday?
- thursday?
- time (<= v1_9_2_180)
- time_to_day_fraction (<= v1_9_2_180)
- to_c (<= v1_9_2_180)
- to_date
- to_datetime
- to_f (<= v1_9_2_180)
- to_i (<= v1_9_2_180)
- to_int (<= v1_9_2_180)
- to_json
- to_r (<= v1_9_2_180)
- to_s
- to_time
- to_yaml (<= v1_9_1_378)
- truncate (<= v1_9_2_180)
- tuesday?
- upto
- _valid_civil? (<= v1_9_2_180)
- _valid_commercial? (<= v1_9_2_180)
- _valid_jd? (<= v1_9_2_180)
- _valid_nth_kday? (<= v1_9_2_180)
- _valid_ordinal? (<= v1_9_2_180)
- _valid_time? (<= v1_9_2_180)
- _valid_weeknum? (<= v1_9_2_180)
- wday
- wednesday?
- weeknum0 (<= v1_9_2_180)
- weeknum1 (<= v1_9_2_180)
- weeknum_to_jd (<= v1_9_2_180)
- wnum0 (>= v1_8_6_287)
- wnum1 (>= v1_8_6_287)
- xmlschema
- yday
- year
- zone
- zone_to_diff (<= v1_9_2_180)
= private
= protected
+(p1)
public
Returns a date object pointing other days after self. The other should be a numeric value. If the other is flonum, assumes its precision is at most nanosecond.
For example:
Date.new(2001,2,3) + 1 #=> #<Date: 2001-02-04 ...> DateTime.new(2001,2,3) + Rational(1,2) #=> #<DateTime: 2001-02-03T12:00:00+00:00 ...> DateTime.new(2001,2,3) + Rational(-1,2) #=> #<DateTime: 2001-02-02T12:00:00+00:00 ...> DateTime.jd(0,12) + DateTime.new(2001,2,3).ajd #=> #<DateTime: 2001-02-03T00:00:00+00:00 ...>
Show source
static VALUE d_lite_plus(VALUE self, VALUE other) { get_d1(self); switch (TYPE(other)) { case T_FIXNUM: { VALUE nth; long t; int jd; nth = m_nth(dat); t = FIX2LONG(other); if (DIV(t, CM_PERIOD)) { nth = f_add(nth, INT2FIX(DIV(t, CM_PERIOD))); t = MOD(t, CM_PERIOD); } if (!t) jd = m_jd(dat); else { jd = m_jd(dat) + (int)t; if (jd < 0) { nth = f_sub(nth, INT2FIX(1)); jd += CM_PERIOD; } else if (jd >= CM_PERIOD) { nth = f_add(nth, INT2FIX(1)); jd -= CM_PERIOD; } } if (simple_dat_p(dat)) return d_simple_new_internal(rb_obj_class(self), nth, jd, dat->s.sg, 0, 0, 0, (dat->s.flags | HAVE_JD) & ~HAVE_CIVIL); else return d_complex_new_internal(rb_obj_class(self), nth, jd, dat->c.df, dat->c.sf, dat->c.of, dat->c.sg, 0, 0, 0, #ifndef USE_PACK dat->c.hour, dat->c.min, dat->c.sec, #else EX_HOUR(dat->c.pc), EX_MIN(dat->c.pc), EX_SEC(dat->c.pc), #endif (dat->c.flags | HAVE_JD) & ~HAVE_CIVIL); } break; case T_BIGNUM: { VALUE nth; int jd, s; if (f_positive_p(other)) s = +1; else { s = -1; other = f_negate(other); } nth = f_idiv(other, INT2FIX(CM_PERIOD)); jd = FIX2INT(f_mod(other, INT2FIX(CM_PERIOD))); if (s < 0) { nth = f_negate(nth); jd = -jd; } if (!jd) jd = m_jd(dat); else { jd = m_jd(dat) + jd; if (jd < 0) { nth = f_sub(nth, INT2FIX(1)); jd += CM_PERIOD; } else if (jd >= CM_PERIOD) { nth = f_add(nth, INT2FIX(1)); jd -= CM_PERIOD; } } if (f_zero_p(nth)) nth = m_nth(dat); else nth = f_add(m_nth(dat), nth); if (simple_dat_p(dat)) return d_simple_new_internal(rb_obj_class(self), nth, jd, dat->s.sg, 0, 0, 0, (dat->s.flags | HAVE_JD) & ~HAVE_CIVIL); else return d_complex_new_internal(rb_obj_class(self), nth, jd, dat->c.df, dat->c.sf, dat->c.of, dat->c.sg, 0, 0, 0, #ifndef USE_PACK dat->c.hour, dat->c.min, dat->c.sec, #else EX_HOUR(dat->c.pc), EX_MIN(dat->c.pc), EX_SEC(dat->c.pc), #endif (dat->c.flags | HAVE_JD) & ~HAVE_CIVIL); } break; case T_FLOAT: { double jd, o, tmp; int s, df; VALUE nth, sf; o = RFLOAT_VALUE(other); if (o > 0) s = +1; else { s = -1; o = -o; } o = modf(o, &tmp); if (!floor(tmp / CM_PERIOD)) { nth = INT2FIX(0); jd = (int)tmp; } else { double i, f; f = modf(tmp / CM_PERIOD, &i); nth = f_floor(DBL2NUM(i)); jd = (int)(f * CM_PERIOD); } o *= DAY_IN_SECONDS; o = modf(o, &tmp); df = (int)tmp; o *= SECOND_IN_NANOSECONDS; sf = INT2FIX((int)round(o)); if (s < 0) { jd = -jd; df = -df; sf = f_negate(sf); } if (f_zero_p(sf)) sf = m_sf(dat); else { sf = f_add(m_sf(dat), sf); if (f_lt_p(sf, INT2FIX(0))) { df -= 1; sf = f_add(sf, INT2FIX(SECOND_IN_NANOSECONDS)); } else if (f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS))) { df += 1; sf = f_sub(sf, INT2FIX(SECOND_IN_NANOSECONDS)); } } if (!df) df = m_df(dat); else { df = m_df(dat) + df; if (df < 0) { jd -= 1; df += DAY_IN_SECONDS; } else if (df >= DAY_IN_SECONDS) { jd += 1; df -= DAY_IN_SECONDS; } } if (!jd) jd = m_jd(dat); else { jd = m_jd(dat) + jd; if (jd < 0) { nth = f_sub(nth, INT2FIX(1)); jd += CM_PERIOD; } else if (jd >= CM_PERIOD) { nth = f_add(nth, INT2FIX(1)); jd -= CM_PERIOD; } } if (f_zero_p(nth)) nth = m_nth(dat); else nth = f_add(m_nth(dat), nth); if (!df && f_zero_p(sf) && !m_of(dat)) return d_simple_new_internal(rb_obj_class(self), nth, (int)jd, m_sg(dat), 0, 0, 0, (dat->s.flags | HAVE_JD) & ~(HAVE_CIVIL | HAVE_TIME | COMPLEX_DAT)); else return d_complex_new_internal(rb_obj_class(self), nth, (int)jd, df, sf, m_of(dat), m_sg(dat), 0, 0, 0, 0, 0, 0, (dat->c.flags | HAVE_JD | HAVE_DF) & ~(HAVE_CIVIL | HAVE_TIME)); } break; default: if (!k_numeric_p(other)) rb_raise(rb_eTypeError, "expected numeric"); other = f_to_r(other); #ifdef CANONICALIZATION_FOR_MATHN if (!k_rational_p(other)) return d_lite_plus(self, other); #endif /* fall through */ case T_RATIONAL: { VALUE nth, sf, t; int jd, df, s; if (wholenum_p(other)) return d_lite_plus(self, RRATIONAL(other)->num); if (f_positive_p(other)) s = +1; else { s = -1; other = f_negate(other); } nth = f_idiv(other, INT2FIX(CM_PERIOD)); t = f_mod(other, INT2FIX(CM_PERIOD)); jd = FIX2INT(f_idiv(t, INT2FIX(1))); t = f_mod(t, INT2FIX(1)); t = f_mul(t, INT2FIX(DAY_IN_SECONDS)); df = FIX2INT(f_idiv(t, INT2FIX(1))); t = f_mod(t, INT2FIX(1)); sf = f_mul(t, INT2FIX(SECOND_IN_NANOSECONDS)); if (s < 0) { nth = f_negate(nth); jd = -jd; df = -df; sf = f_negate(sf); } if (f_zero_p(sf)) sf = m_sf(dat); else { sf = f_add(m_sf(dat), sf); if (f_lt_p(sf, INT2FIX(0))) { df -= 1; sf = f_add(sf, INT2FIX(SECOND_IN_NANOSECONDS)); } else if (f_ge_p(sf, INT2FIX(SECOND_IN_NANOSECONDS))) { df += 1; sf = f_sub(sf, INT2FIX(SECOND_IN_NANOSECONDS)); } } if (!df) df = m_df(dat); else { df = m_df(dat) + df; if (df < 0) { jd -= 1; df += DAY_IN_SECONDS; } else if (df >= DAY_IN_SECONDS) { jd += 1; df -= DAY_IN_SECONDS; } } if (!jd) jd = m_jd(dat); else { jd = m_jd(dat) + jd; if (jd < 0) { nth = f_sub(nth, INT2FIX(1)); jd += CM_PERIOD; } else if (jd >= CM_PERIOD) { nth = f_add(nth, INT2FIX(1)); jd -= CM_PERIOD; } } if (f_zero_p(nth)) nth = m_nth(dat); else nth = f_add(m_nth(dat), nth); if (!df && f_zero_p(sf) && !m_of(dat)) return d_simple_new_internal(rb_obj_class(self), nth, jd, m_sg(dat), 0, 0, 0, (dat->s.flags | HAVE_JD) & ~(HAVE_CIVIL | HAVE_TIME | COMPLEX_DAT)); else return d_complex_new_internal(rb_obj_class(self), nth, jd, df, sf, m_of(dat), m_sg(dat), 0, 0, 0, 0, 0, 0, (dat->c.flags | HAVE_JD | HAVE_DF) & ~(HAVE_CIVIL | HAVE_TIME)); } break; } }