如何更改时间对象的月份?

时间:2017-08-24 12:49:26

标签: ruby time

我有2个时间对象,一个对象有更大的月份:

t = Time.new(2017, 8, 1)
n = Time.new(2017, 9, 1)

如何只用一个输入设置两个对象的月份?

我认为这样的事情会起作用:

month1 = gets   #This works
month2 = month1 + 1

t = Time.new(2017, month1, 1)   #This works too
n = Time.new(2017, month2, 1)   #But this doesn't work

3 个答案:

答案 0 :(得分:2)

> month1 = gets.to_i
> 5
> month2 = month1 + 1
> t = Time.new(2017, month1, 1)
#=> 2017-05-01 00:00:00 +0530 
> n = Time.new(2017, month2, 1)
#=> 2017-06-01 00:00:00 +0530 

注意:

  • 您只需将用户的输入转换为整数。
  • 代码month2 = month1 + 1中的
  • ,month1为String,您正在添加一个错误的整数值

在Rails中:

如果您使用rails,则可以使用 Time#change 内置方法,您可以使用以下任意一个键更改任何参数::year:month时间对象的:day:hour:min:sec:usec :nsec

例如:

> Time.new(2017, 8, 1)
#=> 2017-08-01 00:00:00 +0530 
> Time.new(2017, 8, 1).change(month: 7)
#=> 2017-07-01 00:00:00 +0530 

答案 1 :(得分:2)

相反如此,因为你的问题明显忽略了对象的时间部分,你的解决方案将不得不处理值不在1到11之间的情况,否则将会出现错误的月份错误范围:

Date#>>

这使用Date,它只返回一个新的d = Date.new(2017,11,1) d >> 1 #=> #<Date: 2017-12-01 ((2458089j,0s,0n),+0s,2299161j)> d >> 2 #=> #<Date: 2018-01-01 ((2458120j,0s,0n),+0s,2299161j)> # It can accept negative numbers too # Although this is usually represented as d << 10 d >> -10 #=> #<Date: 2017-01-01 ((2457755j,0s,0n),+0s,2299161j)> d >> -10 == d << 10 #=> true 对象,增加n个月。例如

div

答案 2 :(得分:-1)

我唯一需要做的就是将我读入的字符串转换为整数:

month1 = gets.to_i

然后我的代码运行得很好。