热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在两个日期之间获得独特的月份和年份数组。-Getuniquearrayofmonthandyearsbetweentwodates

IhavetwoDateobjects,forexample:我有两个日期对象,例如:firstFri,02Dec2016lastWed,01Mar201

I have two Date objects, for example:

我有两个日期对象,例如:

first = Fri, 02 Dec 2016 
last = Wed, 01 Mar 2017

What is the most efficient way to get a unique array of months and years between them? In this case I'm after:

什么是最有效的方法来获得一个独特的月和年之间的排列?在这种情况下,我的目标是:

Dec 2016
Jan 2017
Feb 2017
Mar 2017

6 个解决方案

#1


4  

require 'date'

def doit(first, last)
  (12*last.year + last.month - 12*first.year - first.month).times.map do
    first.strftime("%b %Y")
    first = first >> 1
  end
end

first = Date.parse('Fri, 02 Dec 2016')
last  = Date.parse('Wed, 01 Mar 2017')
doit(first, last)
  #=> ["Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017"]

#2


3  

You could create an array of dates, then use strftime to set the correct format, and uniq to avoid repeated values, like this:

您可以创建一个日期数组,然后使用strftime来设置正确的格式,并使用uniq来避免重复的值,比如:

(first..last).map{ |date| date.strftime("%b %Y") }.uniq
#=> ["Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017"]

#3


3  

Since user asks for most efficient way (and just for fun) here's a simple benchmark of the proposed solutions:

由于用户要求使用最有效的方法(而且仅仅是为了好玩),这里有一个简单的基准来衡量所提出的解决方案:

require 'benchmark'

Benchmark.bmbm(10) do |bm|
  bm.report('Cary') do
    first = Date.new(1000, 1, 1)
    last  = Date.new(2100, 1, 1)

    def doit(first, last)
      (12*last.year + last.month - 12*first.year - first.month).times.map do
        first.strftime("%b %Y")
        first = first >> 1
      end
    end

    doit(first, last)
  end

  bm.report('Simple Lime') do
    first = Date.new(1000, 1, 1)
    last  = Date.new(2100, 1, 1)

    dates = []

    while first.beginning_of_month 

Results:

结果:

Rehearsal -----------------------------------------------
Cary          0.020000   0.000000   0.020000 (  0.025968)
Simple Lime   0.190000   0.000000   0.190000 (  0.192860)
Máté          0.460000   0.020000   0.480000 (  0.481839)
Gerry/Dan     0.810000   0.020000   0.830000 (  0.835931)
-------------------------------------- total: 1.520000sec

                  user     system      total        real
Cary          0.020000   0.000000   0.020000 (  0.024871)
Simple Lime   0.150000   0.000000   0.150000 (  0.150696)
Máté          0.390000   0.010000   0.400000 (  0.398637)
Gerry/Dan     0.710000   0.010000   0.720000 (  0.711155)

#4


2  

Not a pretty one-liner, but also doesn't walk through each day individually so should be a fair bit faster for large ranges.

不是一艘漂亮的一艘船,但也不是每天单独行走,所以对于大范围来说应该更快一些。

first = Date.new(2016, 12, 2)
last = Date.new(2017, 3, 1)

dates = []
while first.beginning_of_month  ["Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017"]

#5


1  

Assuming these variables:

假设这些变量:

first = Date.new(2016, 12, 2)
last = Date.new(2017, 3, 1)

A one-liner solution:

一行程序解决方案:

(first.beginning_of_month..last).map { |d| d.strftime("%b %Y") if d.day == 1 }.compact
#=> ["Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017"]

#6


1  

start_date=Date.new(2016,12,2)
end_date=Date.new(2017,3,1)

(start_date..end_date).map{ |d| d.strftime("%b %Y") }.uniq
 => ["Dec 2016", "Jan 2017", "Feb 2017", "Mar 2017"] 

推荐阅读
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
author-avatar
夜幕2502896061
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有