Gur*_*rzo 2 perl datetime date
在我的脚本中,我需要像这样做一个循环:
use DateTime;
for $j(0..3){
my ($date) = DateTime->now->ymd;
my ($k) = 0;
while($k <= $j){
$date = ($date->subtract( days => 7));
$k++;
}
print "$date\n";
}
Run Code Online (Sandbox Code Playgroud)
哪个应该得到当前日期,然后一个星期前,等等.可悲的是,在得到正确的当前日期后,它不起作用,我不知道什么是错的.
Error message is "Can't call method "subtract" without a package or object reference [...]",
Run Code Online (Sandbox Code Playgroud)
但我不知道如何解决这个问题.
如果可能的话,我想继续使用DateTime或将其替换为另一个模块(可能不超过一个).
eld*_*his 10
Datetime->now->ymd
是标量(字符串,它出现),而不是对象/引用.你不能打电话subtract
,因为它不存在.您可能只想ymd
在分配给$date
以下时尝试省略该部分:
my ($date) = DateTime->now;
...
for(0..$j) {
$date = ($date->subtract( days => 7));
}
...
Run Code Online (Sandbox Code Playgroud)
如果要访问该ymd
值,请在创建对象后执行此操作:
my ($date) = DateTime->now;
...
my ($ymd) = $date->ymd;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅CPAN页面.
如果您尝试使用Data :: Dumper,$date
您会立即看到问题所在:$date
是字符串,而不是对象.您应该延迟调用ymd()
它,直到您需要对其进行字符串化.
use strict;
use warnings;
use DateTime;
for my $j (0..3)
{
my $date = DateTime->now;
$date = $date->subtract(days => 7) for (0 .. $j);
print $date->ymd, "\n";
}
Run Code Online (Sandbox Code Playgroud)
PS.通过组合循环可以更简化此代码:
my $date = DateTime->now;
for my $weeks (0..4)
{
print $date->ymd, "\n";
$date = $date->subtract(days => 7);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1931 次 |
最近记录: |