Генерация объекта Time с указанием дня недели и минут с полуночи - PullRequest
2 голосов
/ 09 ноября 2010

Я пытаюсь сгенерировать объект Time, инициализированный для следующего экземпляра определенного дня недели и количества минут после полуночи.

Мои данные (представляющие расписание) выглядят так: день недели, начало, конец.Будний день - это день недели от 0 до 6, а начало / конец - целые числа, представляющие минуты после полуночи в конкретный день недели.

Я хотел бы иметь возможность получить объект Time дляв следующий раз это будет так, чтобы я мог более гибко работать с временем начала / окончания для целей внешнего интерфейса.

Кто-нибудь знает, как это сделать?Я возился с Time.utc без особого успеха.

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Не уверен, правильно ли я интерпретирую это ... Где указан будний день, вы найдете следующую доступную дату этого дня? Например, если сегодня вторник, а ваше расписание установлено на четверг, тогда объект времени будет в полночь в этот четверг? Если это так, что-то вроде этого должно работать:

day_difference = @weekday - Time.now.wday
# If the difference is in the past, then add 7 so that it is next week.
if day_difference < 0
  day_difference = day_difference + 7
end
next_date = Time.now.midnight + day_difference.days
start_time = next_date + @start.minutes
end_time = next_date + @finish.minutes

Где день недели - значение в вашем объекте Schedule. Еще раз, я не на 100% уверен, что вы спрашиваете. Здесь start_time и end_time являются объектами времени, представляющими следующий день недели с соответствующим количеством добавленных минут.

1 голос
/ 09 ноября 2010

Вы можете сделать что-то базовое в этом направлении для чего-то вроде следующего:

class Schedule
  attr_accessor :day_of_week, :start_minute, :finish_minute

  def start(current_date = Time.zone.now)
    current_date.beginning_of_week + day_of_week.days + start_minute.minutes
  end

  def finish(current_date = Time.zone.now)
    current_date.beginning_of_week + day_of_week.days + finish_minute.minutes
  end

  def length
    (finish_minute - start_minute).minutes
  end
end

Так как это довольно элементарно, и я не совсем уверен, для чего вы хотите его использовать, я предлагаю взглянуть на некоторые библиотеки, упомянутые в этом посте ice_cube, и business_time выглядит так, как будто они ' применимы для того, что вы, возможно, хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...