Haml - 获取当前一周的开始和结束日期

Haml - get current week start and end date

我是 HAML 的新手,我有(我希望很简单)关于日期/时间的问题。是否有可能以不太复杂的方式在 HAML 中获取本周的开始和结束日期?我想在我的日历中使用这些日期进行导航。

月份和年份相当简单:

- year       = Date.today.year
- month      = Date.today.month
- day        = Date.today
- monthEnd   = year.to_s + "-" + month.to_s + "-" + Integer(Date.new(year, month, -1).strftime("%d")).to_s
- monthStart = Date.new(year, month, 1)
- yearStart  = year.to_s + "-01-01";
- yearEnd    = year.to_s + "-12-31";

如果不可能,我会在Javascript中完成,但我希望保持一致。

假设一周从星期日开始到星期六结束,并且您想使用 Ruby 的标准库:

- weekStart = Date.today.prev_day(Date.today.cwday)

- weekEnd = Date.today.next_day(6-Date.today.cwday)

顺便说一句,如果您使用 Rails,我可能会利用 Time.zone.now 而不是 Date.today。你的其他人也有同样的想法。 this blog.

中有更多相关信息

@TheChamp:

Rails 有一些方便的方法可以做到这一点:

weekStart = Time.zone.today.beginning_of_week

weekEnd = Time.zone.today.end_of_week

这实际上不是一个 HAML 问题,它更像是一个 Ruby and/or Rails 问题。查看 rails 日期和时间助手:

http://api.rubyonrails.org/classes/DateAndTime/Calculations.html

他们允许你做:

week_start = Time.now.beginning_of_week

简而言之,这些是您正在寻找的方法:

Date.today.beginning_of_week
Date.today.end_of_week

如果您想将一周的开始设置为星期日,您可以在初始化程序中这样做。记得重启你的服务器。

initializers/set_beginning_of_week.rb

Date.today.beginning_of_week = :sunday

进一步改进

HAML 语法 - 等同于 ERB <% %>。所以这用于在您的视图中编写 Ruby 代码。

在您看来,您不应该设置一长串变量或执行复杂的功能。您应该尝试将这些限制为 ifelseeach 和其他基本操作。

此外,对于这些类型的函数,您可以调用辅助方法。

我会设置一些基本的助手,例如:

helpers/application_helper.rb

def current_date
  Date.today # or use Time.zone.today as Rob suggested
end

def current_month
  current_date.month
end

def current_year
  current_date.year
end

导致轻松调用

current_year
current_month
current_date

current_date.beginning_of_week
current_date.end_of_week

current_month.beginning_of_month
current_month.end_of_month

current_year.beginning_of_year
current_year.end_of_year

这可以在任何视图中实现。

views/foo/show.html.haml

.calendar_header
  - current_year

%p Beginning of month is
  - current_month.beginning_of_month