PHP cal 명령 같은 캘린더 한 줄로

7078 단어 PHP
한 마디로 하면cal명령을 직접 집행하는 방향이 없어서 노력해 봤습니다.
cal.php
<?php
echo str_pad(($d = new DateTime)->setDate($argv[2] ?? $d->format('Y'), $argv[1] ?? $d->format('m'), 1)->format('F Y'), 20, ' ', 2). "\nSu Mo Tu We Th Fr Sa\n". preg_replace('/(.{1,21})/', "$1\n", str_repeat('   ', $d->format('w')). sprintf(str_repeat('%2d ', $d->format('t')), ...range(1, 31)));
$ php cal.php
     July 2020
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
$ php cal.php 2
   February 2020
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
$ php cal.php 2 1999
   February 1999
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28
요약하자면 1년 동안의 디스플레이 등 다양한 것들이 재현되지 않았는데...

보충하여 기록하다


좀 길지만 당일 하이라이트 디스플레이 대응판
cal.php
<?php
echo str_pad($a = ($d = new DateTime)->setDate([[$j, $b, $y, $m] = explode(',', $d->format('j,F Y,Y,m')), $argv[2] ?? $y][1], $argv[1] ?? $m, 1)->format('F Y'), 20, ' ', 2). "\nSu Mo Tu We Th Fr Sa\n". preg_replace("/(^|\D)( ?$j)(\D)/", $b == $a ? "$1\e[7m$2\e[m$3" : "$0", preg_replace('/(.{1,21})/', "$1\n", str_repeat('   ', $d->format('w')). sprintf(str_repeat('%2d ', $d->format('t')), ...range(1, 31)))). "\n";

좋은 웹페이지 즐겨찾기