2016-05-06 2 views

ответ

3

Вы можете сделать это следующим образом:

@last_week = (Date.today - 7).strftime('%Y-%m-%d')

+0

Это не отвечает на вопрос. – sawa

+0

@sawa Почему нет? Я думаю, что он точно отвечает на вопрос. –

+0

@KeithBennett Пожалуйста, прочитайте вопрос. Я сделал некоторые изменения, но не изменил вопрос. – sawa

0

Там нет способа, как strftime на Kernel (хотя есть такой метод экземпляра на Date), но вы пытаетесь вызвать такой метод.

Дополнение от @Keith Bennett

Вы не вызывая strftime с явным объектом получить метод, поэтому времени выполнения по умолчанию Руби вызова метода на self, который, в этом контексте, является главным объект уровня, экземпляр Object, который наследуется от BasicObject и включает в себя модуль Kernel. Ни один из них не содержит метода strftime. Однако метод Dateделает имеет strftime. Таким образом, вы можете делать то, что хотите, вызывая strftime в расчетном экземпляре даты.

+1

Почему этот ответ был downvoted? Я не знаю. Насколько я знаю, Савва прав. – illusionist

+1

Я не знаю, и я согласен, что это правильно.Вот выработка вопроса: вы не вызываете 'strftime' с явным объектом для получения метода, поэтому для среды Ruby по умолчанию используется объект верхнего уровня, который является экземпляром' Object', который наследуется от 'BasicObject' и включает модуль «Ядро». Ни один из них не содержит метода «strftime». Тем не менее, 'Date' method * does * имеет' strftime'. Таким образом, вы можете делать то, что хотите, вызывая 'strftime' в вычисленном экземпляре Date. –

1

Это то, что вы хотите, но не делают это .:

module Kernel 
    def strftime(date, format) 
    date.strftime(format) 
    end 
end 

по той причине, смотри ниже комментарии ~~~~~

+1

Я думаю, что это очень плохая идея. Критические компоненты среды исполнения Ruby не должны быть загрязнены специальными методами, цели которых легко достигаются с помощью методов, уже определенных для классов, для которых они имеют смысл. –

+0

, но для этого вопроса, это правильный anwser –

+0

Правда, ваш ответ заставит его подход работать. Тем не менее, я не думаю, что ОП будет настаивать на использовании подхода, который представляет собой плохую идею, если она осведомлена о правильном способе ее выполнения. Когда кто-то из SO спрашивает: «Как я могу [включить мой очень неправильный подход, который приведет к хаосу здесь]?», Я считаю, что для этого человека и его коллег важнее рассказать о лучших практиках, чем разрешить их написать плохой код. Или, как минимум, добавьте заявление об отказе от слова «что-то вроде« Я не предлагаю это делать, потому что ..., но если вы настаиваете, что можете сделать это так ». Я ошибаюсь? –

1

Вы пытаетесь использовать strftime() как бы это была автономной функцией. В Ruby такой функции нет. Правильный способ сделать это - вызвать метод Date#strftime().

Вот пример форматировать текущую дату в виде строки:

Date.today.strftime("%m/%d/%y") 

Теперь, когда вы знаете, как получить дату и формат даты для печати строки, вы можете обратиться ваш конкретный код необходимости, который

@last_week = (Date.today - 7).strftime("%Y-%m-%d") 

Это даст вам дату отформатирован строку «2016-04-28» (или около того, в зависимости от того, когда вы запустите код).

+0

Приобретено для того, чтобы на самом деле пытаться воспитывать ОП или кого-либо еще, у кого такая же проблема, и не педантична. Спасибо. – Beartech

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