【问题标题】:Searching between two dates with Ruby IMAP使用 Ruby IMAP 在两个日期之间搜索
【发布时间】:2012-03-13 14:55:58
【问题描述】:

我是 Ruby 新手,我正在尝试返回上午 9 点到 11 点之间的电子邮件数量。

例如。

@received_today = imap.search(["SINCE", @today.strftime("%d-%b-%Y-%H"):"BEFORE", @today.strftime("%d-%b-%Y-%H")]).count.to_s

我知道这是错误的,但这是我对如何做到这一点的最接近的猜测。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby imap


    【解决方案1】:

    可能是这样的:

    require 'date'
    start_time = Net::IMAP.format_datetime(DateTime.strptime("09:00", "%H:%M"))
    end_time = Net::IMAP.format_datetime(DateTime.strptime("11:00", "%H:%M"))
    @received_today = imap.search(["SINCE", start_time, "BEFORE", end_time ]).count
    

    更新: 试试#2 :)

    由于 imap SEARCH 命令忽略了 SINCE 和 BEFORE 条件中的时间部分,这应该可以工作:

    require 'date'
    
    today = Net::IMAP.format_date(Date.today)
    
    start_time = DateTime.strptime("09:00", "%H:%M")
    end_time = DateTime.strptime("11:00", "%H:%M")
    
    @received_today = imap.search(["ON", today]) # get sequence nums of todays emails
    
    # fetch the INTERNALDATE-s and count the ones in the timeframe
    count = imap.fetch(@received_today, "INTERNALDATE").count{ |data|
      time = DateTime.parse(data.attr["INTERNALDATE"])
      time.between? start_time, end_time
    }
    

    【讨论】:

    • 谢谢 - 我会检查一下并接受它是否有效。我也在考虑只使用 %H 进行搜索,返回一天中 1 小时的所有电子邮件,然后对其进行迭代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2019-01-27
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多