在Ruby/Rails中,如何解析和生成用于HTML的 week输入框的周字符串?
HTML提供了一个周选择器 ,它会返回一个类似 2026-W05 的字符串(2026年的第5 周)。
Ruby提供了strptime/strftime方法,它们似乎可以使用格式 "%G-W%V" 来处理这个。
因此,我使用了这些方法,结合在MDN上提供的示例(在MDN上的示例),但未能得到相同的结果(下方的代码)。
在Ruby或 Rails中,是否有更好的方式来处理这些输入?
class DateHelper
# Parse a string provided by a HTML week input
def self.parse_iso8601_week(string)
Date.strptime(string, "%G-W%V").all_week
end
def self.to_iso8601_week(date_range)
date_range.first.strftime("%G-W%V")
end
end
describe DateHelper, "iso8601 (HTML spec) week conversions" do
RSpec.shared_examples "conversion" do |iso_week, start_date, end_date|
it do
result = DateHelper.parse_iso8601_week(iso_week)
# converts to a date range
expect(result).to eq start_date.to_date..end_date.to_date
# converts back to the same string
expect(DateHelper.to_iso8601_week(result)).to eq iso_week
end
end
include_examples "conversion", "2001-W37", "2001-09-10", "2001-09-16"
include_examples "conversion", "1953-W01", "1952-12-29", "1953-01-04"
include_examples "conversion", "1948-W53", "1948-12-27", "1949-01-02"
include_examples "conversion", "1949-W01", "1949-01-03", "1949-01-09"
end
结果:
DateHelper iso8601 (HTML spec) week conversions
is expected to eq "2001-W37"
is expected to eq Mon, 29 Dec 1952..Sun, 04 Jan 1953 (FAILED - 1)
example at ./spec/lib/date_helper_spec.rb:83 (FAILED - 2) # Date::Error: invalid date
is expected to eq "1949-W01"
编辑:这个问题仅在我的应用的环境中出现过。在此发帖前,我忘了先在独立环境中运行代码,抱歉!
解决方案
我通过使用一种不同的方法来解决,而不是 strptime:
def self.parse_iso8601_week(string)
# Date.strptime(string, "%G-W%V").all_week
y, w = string.split("-W")
Date.commercial(y.to_i, w.to_i).all_week
end
不过 strftime 方法格式化正确。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。