2014-12-09 3 views
1

Вот что я пытаюсь достичь - я настроил планировщик для выполнения полночи каждой пятницы, которая собирает данные из службы для даты начала последней пятницы в 00:00:00 и заканчивает время последнего четверг в 23:59:59. Поскольку он должен работать каждый пятница, я не могу жестко закодировать даты, поэтому я подумал о том, чтобы попробовать DateTime.Как вычесть объект даты и времени из даты?

В соответствии с моим требованием, если я выполняю работу в эту пятницу, например, в «2014-12-12T03: 00: 00Z», тогда моя дата начала должна быть «2014-12-05T00: 00: 00Z «и моя дата окончания должна быть« 2014-12-11T23: 59: 59Z ».

Чтобы получить даты начала и окончания, я пытаюсь вычесть дни из моего объекта now. Это то, что я пробовал:

now = DateTime.now 
    p now.new_offset(0).to_s 

    startDate = now - 7 
    p startDate.new_offset(0).to_s 

    endDate = now - 1 
    p endDate.new_offset(0).to_s 

Это дает мне правильную дату, но время не так то вместо даты начала с 00:00:00 и дата окончания с 23:59:59 это будет дата начала с 03:00:00 и заканчивается с 03:00:00.

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

Извините, что я плохо отношусь к датам. Заранее спасибо!!

+0

Вы можете использовать: 'start_date = (Дата .current - 7.days) .beginning_of_day'; 'end_date = (Date.current + 7.days) .end_of_day' – MrYoshiji

ответ

1

Вы можете использовать ситемы beginning_of_day и end_of_day методы

1.9.3-p448 :001 > DateTime.now.beginning_of_day 
=> Tue, 09 Dec 2014 00:00:00 +0300 
1.9.3-p448 :002 > DateTime.now.end_of_day 
=> Tue, 09 Dec 2014 23:59:59 +0300 
+0

Я попробовал это перед публикацией здесь, но не уверен, почему он не находит этот метод. Я получаю «неопределенный метод' begin_of_day »для # ". –

+0

Вот что я использовал p "DateTime.now.beginning_of_day" –

+0

@tech_human, какую версию Rails вы используете? –

0

Вместо того, чтобы делать это вручную, я предложу драгоценный камень под названием Когда: https://github.com/javan/whenever

Это простой DSL для хрон рабочих мест Руби.

Также помните, что DateTime имеет beginning_of_day и end_of_day методов.

1

Я думаю, что вы пытаетесь сделать, это проще сделать с классом Date:

require 'date' 
start_date = (Date.today - 7).to_time 
end_date = Date.today.to_time - 1 
Смежные вопросы