薄明に関するメモ

引続き、PHP日付関数から。
twilightと言う単語が出てくるので、その定義を調べたもの。
「トワイライト」と言うと、私の勝手なイメージからは「薄暮」と言う言葉が浮かぶのだが、
実際は、日の出前と日の入後の「薄明」のことを言うらしい。

以下は、国立天文台からの引用です(一部編集しています)。

日の入り後(日の出前),しばらくは暗くならない.上空の大気が太陽光を散乱し
て光っているためでこれを薄明という.他に日暮れ,黄昏,夜明け,黎明[れい
めい]などとも呼ばれる.

(1) 太陽の伏角[ふかく](水平線と水平線下の太陽の中心とのなす角)が6度以内
  では, 戸外での作業に差し支えない程度の明るさで,一等星が見える
  (日の入り~6度,常用薄明または市民薄明)。
(2) 12度までは海上で水平線が認められる状態で,多くの星が見えるようになる
  (6度~12度,航海薄明)。
(3) さらに太陽が低くなり伏角が18度に達すると,空はほとんど完全に暗くなり肉
  眼で6等星まで見え天文観測ができる
  (12度~18度,天文薄明)。

PHPでは、date_sun_info()関数でこの情報が取得できます。

(1) 市民薄明:civil_twilight_begin と civil_twilight_end
(2) 航海薄明:nautical_twilight_begin と nautical_twilight_end
(3) 天文薄明:astronomical_twilight_begin と astronomical_twilight_end

などが、連想配列で取得できます。

但し、精度は保証の限りではありません!

PHP strftime() のwindows サポート

PHPドキュメント内に、標記関数の全formatパラメータのサポート状況を調査するような事例が記載されています。
これを、windows7 xampp(PHP 5.6.30) とレンタルサーバ(lolipop php:5.4.45)の双方で実行してみた。

format lolipop windows
‘%’
‘A’
‘a’
‘B’
‘b’
‘C’ ×
‘c’
‘D’ ×
‘d’
‘E’ ×
‘e’ ×
‘F’ ×
‘f’ ×
‘G’ ×
‘g’ ×
‘h’ ×
‘H’
‘i’ ×
‘I’
‘J’ ×
‘j’
‘K’ ×
‘k’ ×
‘L’ ×
‘l’ ×
‘M’
‘m’
‘N’ ×
‘n’ ×
‘O’ ×
‘o’ ×
‘P’ ×
‘p’
‘Q’ ×
‘q’ ×
‘R’ ×
‘r’ ×
‘s’ ×
‘S’
‘T’ ×
‘t’ ×
‘u’ ×
‘U’
‘V’ ×
‘v’ ×
‘W’
‘w’
‘X’
‘x’
‘Y’
‘y’
‘Z’
‘z’

○:Known format
×:Unknown format

この他、’z’(タイムゾーンオフセット)と’Z’(タイムゾーン略称)の戻り値が
不正(?)のため、文字化けのような値が表示されるようなものもあります。

以上から、windowsでは未実装な部分が意外に多いことが分かりました。

PHP ISO-8601 週番号

PHPの日付関数をちらちら調べていたところ、標記の問題に直面した。
問題個所は、strftimeformatパラメータ内”%V”の
説明文です。この文を引用してみると、
「ISO-8601:1988 で規定された、指定した年の週番号。週の開始日は月曜日で、第1週は少なくとも4日はあることになる」
文の前段に問題はないが、後段がどうしても理解できない。
週の開始日は月曜日」とすると、何故「第1週は少なくとも4日はある」となるのか?
意地の悪い意見を言わせてもらえば、「第1週に限らず、週は常に7日に決まっている」はずです。

原文は、次の通り。
「ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week」
英語は苦手なので、Googleさんに翻訳してもらいました。
「ISO-8601:特定の年の1988年の週番号。少なくとも週4日の週の最初の週から始まり、月曜日は週の開始日」
いろいろ怪しい部分もありますが、こちらの方が表現的には正しいのではないか?
言葉で表現すると難しいので、表にして説明してみる。

ケース
1 1日 2日 3日 4日 5日 6日 7日
2 1日 2日 3日 4日 5日 6日
3 1日 2日 3日 4日 5日
4 1日 2日 3日 4日
5 1日 2日 3日
6 1日 2日
7 1日

「週4日」とは、年初からの日数で、週内に4日以上ある最初の週が、その年の第1週に
成るということです。つまり、上の表でいうと
(1)ケース1~ケース4:その年の第1週
(2)ケース5~ケース7:前年の第53週
ということになります。

PHPのドキュメントは、誰もが認める素晴らしいものです。
批判するつもりでこれを書いたのではなく、コンタクト方法が分からないので
関係者が偶然これを見て修正して戴ければとの思いで公開するものです。ご了承願います。