[英]How can I modify a Perl DateTime object?
在我的腳本中,我需要像這樣做一個循環:
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";
}
哪個應該得到當前日期,然后一個星期前,等等。可悲的是,在得到正確的當前日期后,它不起作用,我不知道什么是錯的。
Error message is "Can't call method "subtract" without a package or object reference [...]",
但我不知道如何解決這個問題。
如果可能的話,我想繼續使用DateTime或將其替換為另一個模塊(可能不超過一個)。
Datetime->now->ymd
是標量(字符串,它出現),而不是對象/引用。 你不能對它進行subtract
,因為它不存在。 您可能只想在分配給$date
時嘗試省略ymd
部分:
my ($date) = DateTime->now;
...
for(0..$j) {
$date = ($date->subtract( days => 7));
}
...
如果要訪問ymd
值,請在創建對象后執行以下操作:
my ($date) = DateTime->now;
...
my ($ymd) = $date->ymd;
有關詳細信息,請參閱CPAN頁面。
如果您嘗試在$date
上使用Data :: Dumper ,您會立即看到問題所在: $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";
}
PS。 通過組合循環可以更簡化此代碼:
my $date = DateTime->now;
for my $weeks (0..4)
{
print $date->ymd, "\n";
$date = $date->subtract(days => 7);
}
在計算和處理Date對象之后,最好在打印時執行ymd。
在ymd
和subtract
時切換時看到差異:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use DateTime;
sub main{
my $date = DateTime->now->subtract(days=>7)->ymd;
print "$date\n\n";
}
main();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.