مشکل اسپلیت کردن تاریخ در ICe_Cube

gem
rails
ruby

#1

عرض سلام و ادب
بنده میخوام یه ای پی آی درست کنم که زمان شروع(ساعت) و پایان(ساعت) و تعداد ماه هایی که باید اسپلیت کنه رو دریافت می کنه و بصورت کالکشن بهم بر میگردونه و به ازای هر زمان یه رکورد تو دیتابیسم درست کنه
همه جور بلایی سرش اوردم ولی نشد که نشد
این تمام کاری هست که من انجام دادم. این کار رو تو مادل انجام میدن

def create_recurring_schedules
number=0
if recurring
schedule = Schedule.new(start_time, end_time: end_time)
logger.info “################### The Start Time is: #{start_time} ########################################”

    schedule.rrule Rule.weekly
    logger.info month
    logger.info "################### Before Start #{Time.now} ########################################" 
    logger.info "################### The Date is #{start_time} ########################################"
     if month == 12

        logger.info "################### The 1 month is #{self.s_month} ############################################"
        dates = schedule.occurrences_between(Time.now+start_time, ((Time.now+start_time) + 1.year))
     elsif month == 3
        logger.info "################### The 3 month is #{self.s_month} #############################################"
        dates = schedule.occurrences_between(start_time, start_time + 3.month)
    elsif month == 6
        logger.info "################### The 6 month is #{month} ###########################################"
        dates = schedule.occurrences_between(start_time, start_time + 6.month)
   elsif month == 1
     #start_convert=Date.parse start_time.strftime("%Y-%m-%d %H:%M")
     #start_time=Time.parse(start_time).to_date
     #dates = schedule.occurrences_between(Time.now, Time.now + 1.month)
     #dates = schedule.occurrences_between(start_time, start_time + 1.month)
     dates = schedule.occurrences_between(start_time , start_time + 1.month) 
  
   end
    dates.each do |date|
      number +=1
      logger.info "################### Start number #{number} #############################################"
      ClinicSchedule.create(user_id: user_id, clinic_id: clinic_id, month: month,
                                  start_time: date.start_time.strftime("%Y-%m-%d %H:%M"),
                                  end_time: date.end_time.strftime("%Y-%m-%d %H:%M"),
                                  date: date.strftime("%Y-%m-%d"), recurring: true,
                      	      recurrence_id: recurrence_id)
      logger.info "################### Recurrence ID: "
      logger.info recurrence_id
      logger.info "################### End Recurrence ID ###########################################################"
    end
  end
end

الان مشکلی که من دارم وقتی month رو برابر یک میکنم بجای اینکه ۴ هفته بهم بده ۴۴ هفته بهم میده


#2

میشه لطفا نمونه ورودی و خروجی و بنویسید عملکرد مورد نظرتون متوجه نمیشم


#3

ورودیم اینه
{
“date”:“2017-08-13 07:05”,
“start_time”:“2017-08-13 10:05”,
“end_time”:“2017-08-13 10:10”,
“recurring”:true,
“month”:1
}
خروجی زیاد مهم نیست


#4

شما میتونید از range ها روی دو تاریخ استفاده کنید بعد schedule هارو بسازید
تقریبا مثل کد زیر

(from..to).map{|date| [date.year, date.month]}.uniq.map 
{ |x| create_shedules(year: x.year, month: x.month, time)}