Блог

Ruby: Date / Time

Краткая информация о Time и Date классах.
Класс Time
Документацию по всем методам Time см. здесь. Для определения текущего времени служит метод now (или new).

> Time.now
> Time.new

Чтобы установить заданное время,  используется метод local синоним mktime.

> Time.local(2012, 'jan', 31, 5, 05, 33) 
#=> Tue Jan 31 05:05:33 +0200 2012

Порядок в local: год, месяц, день, час, минуты, секунды.

От объекта Time вы можете получить все виды подробностей, таких как день, годи или день недели:

> now = Time.now
> now.day      # 17
> now.yday    # 119 как много дней прошло в этом году
> now.wday   # день недели 0 = Sun,

Можно так же year, month, zone, hour, min, sec.

utc? или gmt? – определить представляет ли он собой время UTC универсальное (глобальное) время по Гринвичу.
dst? или isdst – установлено ли летнее время
eql? или оператор <=>:

> start = Time.now
> temp = start
> start.eql? Time.now
> start <=> temp

Определить разницу между двумя объектами, посредством вычитания

> Time.now - start

Добавить минуту

> start = Time.now
> start + 60

Добавить час

> start + 60*60

Добавить день

> start + 60*60*24

Класс Date
Документацию по всем методам Date см. здесь.

Для создания объекта Date служит метод new синоним civil.

> require 'date'
> date = Date.new(2008, 15, 5)
> date.to_s

При помощи метода класса today можно создать сегодняшнюю дату:

> Date.today.to_s

Показать дату в формате, определенном пользователем.

> p "Today: #{date.month}/#{data.day}/#{data.year}."

Получить следующий день.

> date.next.to_s

Добавить 30 дней:

> (date + 30).to_s

Вычитать 30 дней:

> (date - 30).to_s

Добавьте и вычитать 6 месяцев, методы >> / <<

> (date >> 6).to_s
> (date << 6).to_s

С помощью метода downto отсчитывает даты в обратном порядке.

> date.downto(date - 3) { |date|  puts date}
2012-07-17
2012-07-16
2012-07-15
2012-07-14

С помощью метода upto отсчитывает даты по мере продвижения

date.upto(date + 3) {|date| puts date}
2012-07-17
2012-07-18
2012-07-19
2012-07-20

Как и в классе Time, можно сравнивать два объекта на равенство. С помощью методов <=>, eql?