2015-05-31 2 views
1

Я хотел бы перебрать дней в месяц, так что:Дата возвращает несуществующий день

require 'time' 
Time.now.month # => 5 
Time.now.day.next # => 32 

Что это значит? 32 мая?

Кроме того,

rota.rb:2:in `<main>': undefined method `days_in_month' for Time:Class (NoMethodError) 

Что случилось?

+0

'Что это означает' => Что сделал * *ты имеешь в виду?; 'Что случилось?' => Что случилось? – sawa

ответ

1

Звонок next не имеет ничего общего с датой или временем - Time.now.day возвращает целое число. Вызов next (или succ) возвращает это число plus один. Для получения дополнительной информации см. Документацию Fixnum.

2

Это должно объяснить:

Time.now.day.class 
=> Fixnum 

Fixnum ничего о датах не знаю, но у него есть метод next.

Если вы хотите, чтобы перейти на следующий день, то:

(Time.now + (60 * 60 * 24)).day 
=> 1 

Или если у вас есть Rails установлена, вы можете сделать:

require 'active_support/time' 
(Time.now + 1.day).day 
=> 1 
+0

http://ruby-doc.org/stdlib-2.2.2/libdoc/date/rdoc/Date.html говорит, что существует следующий метод Date, weird. Но нормально, любая идея, почему у меня нет date_next, days_in_month, любого из этих методов в классе Date? – kaboom

+0

[Дата] (http://ruby-doc.org/stdlib-2.2.2/libdoc/date/rdoc/Date.html) и [Время] (http://ruby-doc.org/core-2.2. 0/Time.html) - это два разных класса. Когда вы вызываете 'Time.now', вы получаете объект' Time', а не 'Date', см. Http://ruby-doc.org/core-2.2.0/Time.html#method-c-now – Exupery

+1

Как и @Exupery, в дополнение к этому 'days_in_month' является методом' active_support'. Вам нужен камень Rails и нужно «потребовать» active_support/time'', тогда вы можете сделать 'Time.days_in_month (5)' например. – Casper

Смежные вопросы