#!/usr/bin/perl
use strict;
use warnings;
use Time::Local qw[timegm];
# Computes the day of the year [1, 366] from the given year, month of the
# year and day of the month.
# https://metacpan.org/pod/Time::Local#Year-Value-Interpretation
# 1 <= $m <= 12
# 1 <= $d <= 31 (day must be valid for the year and month)
sub ymd_to_doy {
@_ == 3 or die q/Usage: ymd_to_doy(year, month, day)/;
my ($y, $m, $d) = @_;
my $t1 = timegm(0, 0, 0, $d, $m - 1, $y);
my $t2 = timegm(0, 0, 0, 1, 0, $y);
return 1 + int(($t1 - $t2)/86_400);
}
use v5.10;
say ymd_to_doy(2015, 10, 11);
say ymd_to_doy(2015, 1, 1);
say ymd_to_doy(2015, 12, 31);
say ymd_to_doy(2012, 12, 31);
輸出:
284
1
365
366
是的,這非常完美!謝謝你的幫助。 – user3367135