2

在从数据库中获取对象之后

Object.select('week(created_at) as week, year(created_at) as year')

它返回从 0 到 53 的周,然后从中创建一个 Date 对象

Date.commercial(x.year,x.week,1)

由于 0 和 53 no of week,它报告“无效日期”错误。

我也试过这个。

Date.strptime("#{x.year}-#{x.week+1}-1","%Y-%W-%w")

但它也因 x.week+1(例如 53+1)而崩溃。寻找一线解决方案

4

3 回答 3

0

我认为你的用法是错误的

我从(这里)在下面找到了这个。

可以肯定的是,请发送您的 ruby​​ 版本以及您的 x.year 和 x.week 输出。

商业(y=-4712, w=1, d=1, sg=ITALY) 点击切换来源

为由年 y、周 w 和周 d 指定的商业日期创建一个新的 Date 对象。

星期一是第 1 天;星期日是第 7 天。

w 和 d 可以为负数,在这种情况下,它们分别从年末和周末倒数。但是,不执行回绕,并且无效值会导致引发 ArgumentError。

y 默认为 -4712,w 为 1,d 为 1;这是朱利安天数第 0 天。

sg 指定日历改革日。强调文本
于 2013-01-11T09:29:12.707 回答
0

不要x.week在你的strptime.

于 2013-01-11T09:29:22.207 回答
0

您应该以 ISO 8601 格式从数据库中获取日期。此格式返回从 1 到 52 的周,这符合#commercial预期的输入。

在红宝石中:

ISO 8601 week-based year and week number:
The week 1 of YYYY starts with a Monday and includes YYYY-01-04.
The days in the year before the first week are in the last week of
the previous year.
  %G - The week-based year
  %g - The last 2 digits of the week-based year (00..99)
  %V - Week number of the week-based year (01..53)

来自https://ruby-doc.org/stdlib-2.5.1/libdoc/date/rdoc/Date.html#method-i-strftime

在 MySQL 中:

%V  Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
%v  Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
%X  Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x  Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v


SELECT DATE_FORMAT('1999-01-01', '%X %V');
+------------------------------------+
| DATE_FORMAT('1999-01-01', '%X %V') |
+------------------------------------+
| 1998 52                            |
+------------------------------------+

来自https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_date-format

于 2020-01-22T13:52:48.063 回答