1

我想知道是否有人可以告诉我如何将 9/15/12 转换为 255 格式。getdate 数组中的 php 中的某些内容可以获取 ydate。

4

6 回答 6

3

我想您是在问如何获得1 <= yday <= 366日期的日期表示,类似于ydayphp 中的getdate(). 在 PERL 中很常见,有不止一种方法可以做到这一点。最简单的机制是localtime()用于今天的日期:

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

如果您想在其他日期执行此操作,我可能会使用TimeDateCPAN 模块

use Date::Parse;

print time2str("%j",str2time("9/15/2012"));
于 2012-09-07T17:52:05.210 回答
2

我认为 Tawnos 提到的 phpyday来自getdate()目标。这是一个选项(假设 2012 是您的日期字符串中的年份):

use strict;
use warnings;
use Date::Calc qw/Day_of_Year/;

my $date = '9/15/12';
my ( $month, $day, $year ) = split '/', $date;
my $doy = Day_of_Year( "20$year", $month, $day ) - 1;

print $doy; # (0 - 365)

输出:

258
于 2012-09-07T18:14:31.093 回答
2

你想要一年中的哪一天吗?不过,那将是第 258 天(基于 0)或第 259 天(基于 1)。仅使用核心 Perl:

use Time::Local qw( timegm );
my $date = '9/15/12';
my ($m,$d,$y) = split(qr{/}, $date);
my $epoch = timegm(0,0,0, $d,$m-1,$y);
my $yday = ( gmtime($epoch) )[7];   # 258 (0-based index)

请注意,无论日期的时区如何, timegm+都适用。gmtime

于 2012-09-07T18:19:01.393 回答
1

您只能使用strftime核心模块中的功能POSIX

use strict;
use POSIX qw(strftime);

print strftime "%j", localtime(time);
于 2012-09-07T18:31:32.640 回答
1
my $dt = '9/15/2012';
my ( $m, $d, $y ) = split( '/', $dt );
my $t = POSIX::mktime( 0, 0, 0, $d, $m - 1, $y - 1900 );
say [ localtime $t ]->[7] - 3;

朱利安日期(减 1)是列表中的插槽 7,从localtime和返回gmtime。为什么要减去 3?我不知道; 9 月 15 日是 259 朱利安。它仍然执行将“9/15/2012”映射到 255 的功能。

于 2012-09-07T20:44:19.560 回答
1

这是另一种方式,使用核心模块Time::Piece

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime(shift,"%m/%d/%y");
print $t->yday, "\n";

日输出是零相关的:1 月 1 日 = 0。

于 2012-09-07T18:50:06.250 回答