summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-03-25 18:36:29 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-03-25 18:36:29 +0000
commit950758b028049141a917a28f7232a3f05ee6b46e (patch)
tree11bc2cc7e194c9a7cbd472204da372b2508926f1 /ext
parentd823f587d19092699cf83e32760c7cc57a4c1b1c (diff)
merge revision(s) 57737: [Backport #13225]
date_core.c: expand docs for Date shifting * ext/date/date_core.c: [DOC] expand docs for Date shifting * add examples for Date#>> and Date#<< that clarify some edge cases * add examples for Date#next_year and Date#prev_year * add cross references to Date#>> and Date#<< [ruby-core:79584] [Bug #13225] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@58125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/date/date_core.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/ext/date/date_core.c b/ext/date/date_core.c
index 8bdea3d4ca..7361c27a52 100644
--- a/ext/date/date_core.c
+++ b/ext/date/date_core.c
@@ -5965,9 +5965,20 @@ d_lite_next(VALUE self)
* The argument +n+ should be a numeric value.
*
* Date.new(2001,2,3) >> 1 #=> #<Date: 2001-03-03 ...>
- * Date.new(2001,1,30) >> 1 #=> #<Date: 2001-02-28 ...>
- * Date.new(2001,1,31) >> 1 #=> #<Date: 2001-02-28 ...>
* Date.new(2001,2,3) >> -2 #=> #<Date: 2000-12-03 ...>
+ *
+ * When the same day does not exist for the corresponding month,
+ * the last day of the month is used instead:
+ *
+ * Date.new(2001,1,28) >> 1 #=> #<Date: 2001-02-28 ...>
+ * Date.new(2001,1,31) >> 1 #=> #<Date: 2001-02-28 ...>
+ *
+ * This also results in the following, possibly unexpected, behavior:
+ *
+ * Date.new(2001,1,31) >> 2 #=> #<Date: 2001-03-31 ...>
+ * Date.new(2001,1,31) >> 1 >> 1 #=> #<Date: 2001-03-28 ...>
+ *
+ * Date.new(2001,1,31) >> 1 >> -1 #=> #<Date: 2001-01-28 ...>
*/
static VALUE
d_lite_rshift(VALUE self, VALUE other)
@@ -6016,9 +6027,20 @@ d_lite_rshift(VALUE self, VALUE other)
* The argument +n+ should be a numeric value.
*
* Date.new(2001,2,3) << 1 #=> #<Date: 2001-01-03 ...>
- * Date.new(2001,1,30) << 11 #=> #<Date: 2000-02-29 ...>
- * Date.new(2001,1,31) << 11 #=> #<Date: 2000-02-29 ...>
- * Date.new(2001,2,3) << -1 #=> #<Date: 2001-03-03 ...>
+ * Date.new(2001,2,3) << -2 #=> #<Date: 2001-04-03 ...>
+ *
+ * When the same day does not exist for the corresponding month,
+ * the last day of the month is used instead:
+ *
+ * Date.new(2001,3,28) << 1 #=> #<Date: 2001-02-28 ...>
+ * Date.new(2001,3,31) << 1 #=> #<Date: 2001-02-28 ...>
+ *
+ * This also results in the following, possibly unexpected, behavior:
+ *
+ * Date.new(2001,3,31) << 2 #=> #<Date: 2001-01-31 ...>
+ * Date.new(2001,3,31) << 1 << 1 #=> #<Date: 2001-01-28 ...>
+ *
+ * Date.new(2001,3,31) << 1 << -1 #=> #<Date: 2001-03-28 ...>
*/
static VALUE
d_lite_lshift(VALUE self, VALUE other)
@@ -6031,6 +6053,8 @@ d_lite_lshift(VALUE self, VALUE other)
* d.next_month([n=1]) -> date
*
* This method is equivalent to d >> n.
+ *
+ * See Date#>> for examples.
*/
static VALUE
d_lite_next_month(int argc, VALUE *argv, VALUE self)
@@ -6048,6 +6072,8 @@ d_lite_next_month(int argc, VALUE *argv, VALUE self)
* d.prev_month([n=1]) -> date
*
* This method is equivalent to d << n.
+ *
+ * See Date#<< for examples.
*/
static VALUE
d_lite_prev_month(int argc, VALUE *argv, VALUE self)
@@ -6065,6 +6091,12 @@ d_lite_prev_month(int argc, VALUE *argv, VALUE self)
* d.next_year([n=1]) -> date
*
* This method is equivalent to d >> (n * 12).
+ *
+ * Date.new(2001,2,3).next_year #=> #<Date: 2002-02-03 ...>
+ * Date.new(2008,2,29).next_year #=> #<Date: 2009-02-28 ...>
+ * Date.new(2008,2,29).next_year(4) #=> #<Date: 2012-02-29 ...>
+ *
+ * See also Date#>>.
*/
static VALUE
d_lite_next_year(int argc, VALUE *argv, VALUE self)
@@ -6082,6 +6114,12 @@ d_lite_next_year(int argc, VALUE *argv, VALUE self)
* d.prev_year([n=1]) -> date
*
* This method is equivalent to d << (n * 12).
+ *
+ * Date.new(2001,2,3).prev_year #=> #<Date: 2000-02-03 ...>
+ * Date.new(2008,2,29).prev_year #=> #<Date: 2007-02-28 ...>
+ * Date.new(2008,2,29).prev_year(4) #=> #<Date: 2004-02-29 ...>
+ *
+ * See also Date#<<.
*/
static VALUE
d_lite_prev_year(int argc, VALUE *argv, VALUE self)