Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中跳过日期_Ruby_Date - Fatal编程技术网

在ruby中跳过日期

在ruby中跳过日期,ruby,date,Ruby,Date,我正在创建一个程序,该程序将简化向用户发送电子邮件的任务,但是我需要找出一种方法,跳过周六和周日,在我们等待处理的电子邮件过程中,用户有6天的时间回复,因此,我需要的是一种方法,让Ruby的Date课程跳过周六和周日,并准确计算不包括周末在内的6天 例如: require 'date' date = Date.today #=> #<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)> new_date = date + 6 #=

我正在创建一个程序,该程序将简化向用户发送电子邮件的任务,但是我需要找出一种方法,跳过周六和周日,在我们等待处理的电子邮件过程中,用户有6天的时间回复,因此,我需要的是一种方法,让Ruby的
Date
课程跳过周六和周日,并准确计算不包括周末在内的6天

例如:

require 'date'

date = Date.today
#=> #<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)>
new_date = date + 6
#=> #<Date: 2016-05-12 ((2457521j,0s,0n),+0s,2299161j)>
new_date.strftime('%A')
#=> "Thursday"
date.strftime('%A')
#=> "Friday"
需要“日期”
date=今天的日期
#=> #
新建日期=日期+6
#=> #
新的\u日期.strftime(“%A”)
#=>“星期四”
date.strftime(“%A”)
#=>“星期五”
显然,本例计算周六和周日,那么如何跳过这两天并保持计数准确?

您可以使用两种方法和

>需要“日期”
=>正确
>>d=新日期(2016年5月3日)
=> #
>>星期六?
=>错误
>>星期天?
=>错误
>>a=d+6
=> #
>>星期六?
=>错误
>>d=今天的日期
=> #
>>a=d+1
=> #
>>星期六?
=>正确

以下是您对需求描述的Ruby直译:

require "date"

p today = Date.today
p (1..Float::INFINITY)
  .lazy
  .map { |offset| today + offset }
  .reject { |date| date.saturday? || date.sunday? }
  .drop(5)
  .next
代码创建一个从明天开始的所有日期的惰性枚举,拒绝所有周六和周日,删除接下来的5个有效候选,然后返回下一个

输出:

#<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)>
#<Date: 2016-05-16 ((2457525j,0s,0n),+0s,2299161j)>
#
#

快速浏览日历可以看出输出是正确的。

您可以使用
日期#周六?
日期#周日?

或者,你可以用gem为你处理这一切。根据您的需要进行配置后(例如,将“工作时间”设置为午夜-->午夜,如果您需要的话),您可以执行以下各种操作:

6.business_days.after(Date.new(2014, 02, 7))
6.business_days.from_now

依此类推。

如果是
周六
周日
,您可以使用
date.strftime(“%A”)检查日期,然后使用if条件跳过任务。我会尝试一下。然而,这无助于保持计数的准确性?那是一块非常棒的宝石!谢谢你!我有点担心猴子修补核心类,比如数字类。这种宝石被广泛使用和信任吗?是的。应用非常广泛。但是,正如您可以想象的那样,您需要注意如何使用它。我所看到的最大的错误是人们编写不使用工作时间的单元测试——结果是测试“随机”失败。(实际上,在一天/一周/一个月的特定时间失败。)但这不是图书馆本身的问题;只是在使用的方式上。那很酷!我编写了一个脚本,将算法作为一种方法来实现,并打印出值来证明结果是正确的。它在。此外,上限不必如此之高;10为我工作。
6.business_days.after(Date.new(2014, 02, 7))
6.business_days.from_now