Как получить вчерашнюю дату по местному времени?

Вы также можете попробовать следующее:

<div ng-init="myVar = 'www.thesoftdesign'">
        <h1>Tutorials</h1>
        <p>Go to <a ng-href="{{myVar}}">{{myVar}}</a> to learn!</p>
</div>
13
задан Zaid 18 August 2010 в 02:49
поделиться

5 ответов

Проблему перехода на летнее время можно обойти, взяв 3600 с сегодняшнего полудня вместо текущего времени:

#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;

sub spGetYesterdaysDate;
print spGetYesterdaysDate;

sub spGetYesterdaysDate {
my ($sec, $min, $hour, $mday, $mon, $year) = localtime();
my $yesterday_midday=timelocal(0,0,12,$mday,$mon,$year) - 24*60*60;
($sec, $min, $hour, $mday, $mon, $year) = localtime($yesterday_midday);
my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
my $YesterdaysDate = sprintf "%s %02d %4d", $abbr[$mon], $mday, $year+1900;
return $YesterdaysDate;
}

В свете «неуказанного» задокументированного поведения решения strftime, предложенного Часом, этот подход может быть лучше, если вы: re не может протестировать ожидаемые, но не гарантированные результаты на нескольких платформах.

12
ответ дан 1 December 2019 в 17:20
поделиться

Как ни заманчиво просто вычесть секунды дня из текущего времени, бывают случаи, когда это приведет к неправильному ответу (дополнительные секунды, летнее время и, возможно, другие). Мне легче просто позволить strftime (доступному в основном модуле Perl 5 POSIX ) позаботиться обо всем этом за меня.

#!/usr/bin/perl

use strict;
use warnings;

use Time::Local;
use POSIX qw/strftime/;

#2010-03-15 02:00:00
my ($s, $min, $h, $d, $m, $y) = (0, 0, 0, 15, 2, 110);

my $time      = timelocal $s, $min, $h, $d, $m, $y;    
my $today     = strftime "%Y-%m-%d %T", localtime $time;
my $yesterday = strftime "%Y-%m-%d %T", $s, $min, $h, $d - 1, $m, $y;
my $oops      = strftime "%Y-%m-%d %T", localtime $time - 24*60*60;
print "$today -> $yesterday -> $oops\n";
18
ответ дан 1 December 2019 в 17:20
поделиться

используйте Time :: Piece .

use strict;
use warnings;
use 5.010;

# These are core modules in Perl 5.10 and newer
use Time::Piece;
use Time::Seconds;

my $yesterday = localtime() - ONE_DAY;
say $yesterday->strftime('%b %d %Y');

Обратите внимание, что это может пойти не так в некоторых пограничных случаях, например, при переходе на летнее время. Следующая версия действительно работает правильно в таких случаях:

use strict;
use warnings;
use 5.010;

# These are core modules in Perl 5.10 and newer
use Time::Piece;
use Time::Seconds;

my $now = localtime();
my $yesterday = $now - ONE_HOUR*($now->hour + 12);
say $yesterday->strftime('%b %d %Y');

В качестве альтернативы вы можете использовать модуль DateTime, как описано в другом ответе. Однако это не основной модуль.

6
ответ дан 1 December 2019 в 17:20
поделиться
use DateTime qw();
DateTime->now->subtract(days => 1); 

Выражение во второй строке возвращает объект DateTime .

22
ответ дан 1 December 2019 в 17:20
поделиться
localtime(time() - 24*60*60)
1
ответ дан 1 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: