转换日期字符串

时间:2009-10-13 12:37:41

标签: ruby-on-rails

我有一个日期字符串:“2009-10-12”。我想编写一个方法,将其作为参数并返回一周中的三个字母(在本例中为“mon”)。我写了这个:

def date_to_day_of_week(date)
  d = Date.parse(date).strftime("%a").downcase!
  return d
end

当我从脚本/控制台调用它时,它按预期工作。但是,当我从我的应用程序中调用它时,我会根据我的操作得到各种不同的错误。主要问题是date_to_day_of_week是一个未定义的方法,或者如果我移动方法的内容(即day = Date.parse(date).strftime("%a").downcase!内联,那么我得到private method gsub! called for Mon, 12 Oct 2009:Date。我只是觉得我开始了理解Ruby和Rails,然后我回到了开始!

任何人都可以帮忙吗?

GAV株系

6 个答案:

答案 0 :(得分:2)

此代码位于何处?例如,如果它位于控制器调用的模型中,您可能希望使用:

def self.date_to_day_of_week(date)
  d = Date.parse(date).strftime("%a").downcase!
  return d
end

使用以下命令在控制器中调用它:

def index
  # ...
  @date = Model.date_to_day_of_week("2009-12-30")
end

答案 1 :(得分:1)

查看ActiveSupport :: CoreExtensions :: Date :: Conversions。您可以定义自己的DATE_FORMATS并使用“to_formatted_s”输出它。我相信缩短的月份你想要的是“%b”

答案 2 :(得分:0)

如果您收到“未定义的方法”错误,则表示此方法从被调用的点开始无法访问。

如果您尝试从帮助程序调用它,则需要将该方法放在ApplicationHelper中,而不是ApplicationController中。如果您还希望可以从控制器访问它,那么将以下内容放在ApplicationController中:

helper_method :date_to_day_of_week

答案 3 :(得分:0)

说dt = Time.now() dt.strftime( “%a”)的 给你一天

答案 4 :(得分:0)

试试这个

def date_to_day_of_week(date)
  Date.parse(date).strftime("%a").downcase
end

Ruby返回方法中评估的最后一个值,因此您无需专门返回任何内容。还有!小写!只是改变它被调用的字符串的值,而不是像你期望的那样返回值。

答案 5 :(得分:0)

你试过吗

day = Date.parse(date).strftime(“%a”)。 to_s .downcase

由于ActiveSupport

,日期方法在rails与ruby之间的工作方式略有不同