Если вы хотите, чтобы вчерашняя дата:
use DateTime qw( );
my $yday_date =
DateTime
->now( time_zone => 'local' )
->set_time_zone('floating')
->truncate( to => 'days' )
->subtract( days => 1 )
->strftime('%Y-%m-%d');
Например, в Нью-Йорке, в 2019-05-14 01:00:00, он даст 2019-05-13.
Например, в Нью-Йорке в 2019-11-04 00:00:00 он выдаст 2019-11-03.
Обратите внимание, что ->now( time_zone => 'local' )->set_time_zone('floating')->truncate( to => 'days' )
используется вместо ->today( time_zone => 'local' )
для решения эта проблема .
Если вы хотите время на день раньше:
use DateTime qw( );
my $yday_datetime =
DateTime
->now( time_zone => 'local' )
->subtract( days => 1 )
->strftime('%Y-%m-%d %H:%M:%S');
Например, в Нью-Йорке, в 2019-05-14 01: 00: 00 - 2019-05-13, 01: 00: 00.
Например, в Нью-Йорке в 2019-03-10, 12:00:00 - 2019-03.-09 12: 00: 00.
Например, в Нью-Йорке в 2019-03-11 02:30:00 будет выдано сообщение об ошибке.(2019-03-10 02:30:00 не существует из-за перехода на летнее время.)
Если вы хотите установить время на 24 часа раньше:
use DateTime qw( );
my $yday_datetime =
DateTime
->now( time_zone => 'local' )
->subtract( hours => 24 )
->strftime('%Y-%m-%d %H:%M:%S');
Например, в Нью-Йорке, в 2019-05-14 01:00:00, он даст 2019-05-13 01: 00: 00.
Например, в Нью-Йорке, в 2019-03-10 12:00:00, это будет 2019-03-09 11: 00: 00.
Например, в Нью-Йорке, в 2019-03-11 02:30:00, этодаст 2019-03-10 01: 30: 00.