【问题标题】:Future Date minus Now = Days perl未来日期减去现在 = 天数 perl
【发布时间】:2013-03-08 20:40:06
【问题描述】:

这里是新手。抱歉,提前致谢。 我有一个未来的约会

(ie:2013-06-09 / $fields[12])

我今天需要减法

(ie:2013-03-08)

获取剩余天数。

【问题讨论】:

  • 嗯...好吧,您是否已经尝试在 stackoverflow 上搜索类似的问题? :) (可能是这样的问题:stackoverflow.com/questions/821423/…
  • 是的,我搜索并没有发现类似的东西。您的链接会有所帮助。谢谢

标签: perl datetime


【解决方案1】:

我会使用DateTime。如果您以日期作为字符串开头,则可以使用DateTime::Format::Strptime 对其进行解析。

use DateTime                   qw( );
use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
    pattern   => '%Y-%m-%d',
    time_zone => 'local',
    on_error  => 'croak',
);

my $ref  = DateTime->today( time_zone => 'local' );
my $dt   = $format->parse_datetime('2013-06-09');
my $days = $ref->delta_days($dt)->in_units('days');

print(
   $dt < $ref ? "$days days ago\n" :
   $dt > $ref ? "$days days from now\n" :
   "today\n");

【讨论】:

    【解决方案2】:

    使用DateTime module:

    use DateTime;
    
    my $d1 = DateTime->new(
          year       => 2013,
          month      => 9,
          day        => 6
    );
    
    my $d2 = DateTime->now;
    my $diff = $d2->delta_days($d1);
    
    print $diff->delta_days, "\n";  # 182 (from 8/3/2013)
    

    【讨论】:

    • 如果您不指定时区,它可能会给出与您所在位置不符的答案。世界各地的日期都不一样。
    • $dur-&gt;delta_days 被记录为主要供内部使用。 -&gt;in_units('days') 是首选接口。
    • $dur->delta_days 是一种数学方法,我在文档中没有看到您的建议
    • 我看了DateTime 0.78的文档,delta_days是一种数学方法,根据作者的定义
    • 那你读错了 DateTime 的文档。您应该一直在查看 DateTime::Duration 的文档,因为这是正在讨论的方法。它不执行任何数学运算,其整个文档可以总结为“供内部使用”。 (我已经删除了这条评论,所以 Miguel 可以删除他的评论,但他的遗体还在并且正在获得支持,所以我会再次解决这个问题。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2013-02-03
    相关资源
    最近更新 更多