こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

Perl 日付処理 逆

Perl 日付処理仕組み
$Tm = "1488992820";
my ($Nsec, $Nmin, $Nhour, $Ndate, $Nmon, $Nyear, $Nday) = localtime($Tm);
$Nyear += 1900;
$Nmon += 1;
print "$Nyear/$Nmon/$Ndate";

これで結果は
2017/3/9

となりますが、
逆に

2017
3

上記の年月で
逆に戻したいのですが、
どのようにするのでしょうか?
1488992820のよう細かい日付でなくていいのですが
2017年3月内のlocationTimeに戻したいのです。

説明が下手くそなので、
実際やりたいこと・・・
ログファイル1列目に
1488992820
のように、ログ時間があり、
それをまず
月間別に分け
上記ですと
2017年3月というアンカーを作り
<a href="test.cgi?Y=2017&M=3">2017年3月</a>

このような感じがページに並び、
これを選択すると

ページでそれに該当する行だけ配列に入れ
表示させるということです。

ブログ記事にあるアーカイブ、月間別
を作りたいです

※ログファイルに、予め
2017,3
といったように、書き込むのはなしです。
これは最終手段・・・

無理やりではありますが
value="2017,3,"
my $a = 0;
my @DATA = grep { $DATA[$_] =~ /,2017,3,/ } 0..$#DATA;
$a = scalar @DATA ;
一応実行はできております。

投稿日時 - 2017-12-07 13:43:52

QNo.9405299

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

POSIXモジュールのmktime関数を使います。

perl -e 'use POSIX qw(mktime); $time_t = mktime( 0, 7, 2, 9, 3 - 1, 2017 - 1900 );print "$time_t\n"'
1488992820

perl -e 'use POSIX qw(mktime); $time_t = mktime( 0, 0, 0, 9, 3 - 1, 2017 - 1900 );print "$time_t\n"'
1488985200

投稿日時 - 2017-12-07 14:48:11