我有一个数组的n
字符串格式为YYYY-MM-DD(例如,"2010-10-31").
如何将日期与此数组中的字符串进行比较?
例如,超过30天前删除字符串?
Dav*_*man 14
关于伟大的事情YYYY-MM-DD
-格式化日期是,你可以使用简单的字符串比较比较.在Perl中,这就是lt
和gt
运营商.
在这种情况下,听起来你只是想检查数组中的日期是早于还是晚于给定的目标日期(恰好是"30天前").对于这种情况,我将采用的方法是首先确定30天前的日期,然后将其作为字符串与数组中的每个日期进行比较.我不会介绍将所有YYYY-MM-DD
字符串转换为"正确的"日期对象,纪元时间等的开销,而只是为了测试代表较早的日期.
#!/usr/bin/env perl
use strict;
use warnings;
my $thirty_days = 30 * 24 * 60 * 60;
my ($old_day, $old_month, $old_year) = (localtime(time - $thirty_days))[3..5];
my $cutoff = sprintf('%04d-%02d-%02d',
$old_year + 1900, $old_month + 1, $old_day);
my @dates = ('2010-10-12', '2010-09-12', '2010-08-12', '2010-09-13');
for my $date (@dates) {
print "$date\n" if $date gt $cutoff;
}
Run Code Online (Sandbox Code Playgroud)
猜猜有多种方法可以做到,但我喜欢Date :: Simple这样的东西..
来自文档的一个例子:
use Date::Simple ('date', 'today');
# Difference in days between two dates:
$diff = date('2001-08-27') - date('1977-10-05');
# Offset $n days from now:
$date = today() + $n;
print "$date\n"; # uses ISO 8601 format (YYYY-MM-DD)
Run Code Online (Sandbox Code Playgroud)
这对于对象++进行算术很有用.
但是只有日期,没有小时,分钟或秒
use strict; use warnings;
use DateTime ();
use DateTime::Duration ();
use DateTime::Format::Natural ();
my $parser = DateTime::Format::Natural->new;
my $now = DateTime->now;
my $delta = DateTime::Duration->new( days => 30 );
my $cutoff = $now->subtract_duration( $delta );
my @new_dates = map { $_->[1] }
grep { -1 == $_->[0] }
map {
chomp;
[
DateTime->compare(
$parser->parse_datetime( $_ ),
$cutoff
),
$_
]
} <DATA>;
print "@new_dates";
__DATA__
2010-07-31
2010-08-31
2010-09-30
2010-10-31
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26086 次 |
最近记录: |