MB-Support

パソコン初心者のサポートページ

掲示板の投稿データに含める日付の形式


ここ数日、PHP(サーバーサイドスクリプト) と MySQL(データベース)を使って掲示板を制作しているのですが、これが意外に楽しい。 掲示板やブログに投稿するのは苦手ですが、これらのシステムを作っている時が一番楽しいを思える今日この頃・・・別の意味では悲しいが・・・。

PHP と MySQL をこれから始める人には、掲示板制作をおすすめします。たぶん、掲示板を作れる様になれば、ブログみたいなシステムも作れます(たぶん・・・)。 しかし、勉強というカテゴリではおすすめしますが、公開する目的があるなら、かなり厳しいかもしれません。 最新バージョンの PHP や MySQL をインストールしていれば、ある程度の事は守れますが、それでもセキュリティが心配です。公開には十分テストしてからの方が良いでしょう。

掲示板に投稿された情報を MySQL に格納します。通常は「投稿」「一覧表示」の二つで掲示板は成り立ちますが(削除/変更も必要かな・・)。MySQL に格納された情報を、自由な条件で抽出/表示が可能になります。その1つの使い方として、掲示板でも RSS を発行する事が思い付くでしょう。 ここで問題になるのが日付の入力です。これは掲示板に投稿したコメントと一緒に MySQL に格納するべき物ですが、どうもこの取り扱い方が管理人には、さっぱり分かりませんでした。 で・・・結論から言えば、とりあえず投稿データに

Wed, 22 Mar 2006 17:03:10 +0900

上の形式の日付を入力する事をおすすめします。 これは、RFC822と呼ばれる形式の日付で、RSS の PubData(コメントが投稿された日時)にも使えます。 ちょっとRSSについて・・・ でも掲載したのですが、正直、あの時には意味が分からなかったです。 RSS に埋め込むのには都合が良いのですが、掲示板の投稿表示に、どうやってこれを使えば良いのか分かりませんでした。 上の形式は、パッと見ただけでは理解し難いのですが、よく考えると日時に関する全てのデータが収まっています(曜日の情報まで)。なので、これを MySQL の 1 つのカラムに入力しておけば、意味は分からなくても とりあえず安心できます。


まず、この形式の日付を取得するには

date("r");

を使います。出力してみるには、いろんなやり方がありますが、ここでは変数「$day」に「date("r")」を代入して、print で出力してみます。

<?php
$day = date("r");
print ("$day");
?>

このファイルを WEB サーバーにアクセスして(127.0.0.1やlocalhost)、ブラウザで表示すると右上画像の様に表示されます。つまり、変数「$day」に RFC822 形式の日付が格納されたわけです。 なんでこんな説明をするのか? 悲しい事に管理人はこのやり方を知らずに「$day = date("D, j M Y H:i:s +09:00");」を記述していたのです。 これをコメント、投稿者などの情報と一緒に MySQL に格納します。



掲示板で使う日付の種類が確定して、MySQL にデータを格納しました。今度はこのデータをカスタマイズする方法です。 RSS の PubData は、このまま使えるので良いとして、問題は掲示板に出力する時です。

デザインにより異なりますが、RFC822 形式の日付をそのまま出力するのも何か違和感があります。 特に「+0900」がねぇ〜。これはタイムゾーンを呼ばれもので、時差を表しています。 日本は世界標準時(GMT グリニッジ標準時)よりも9時間早いので「+0900」と表示します。 これを以下の様に変更してみましょう。

MySQLから取り出した日付:


Wed, 22 Mar 2006 19:20:50 +0900

変換後:


2006 年 3 月 22 日 (Wed) 19 : 20 : 50

やり方は、MySQL から取り出した RFC822 形式の日付を変数「$day」に代入します。


$day = "Wed, 22 Mar 2006 19:20:50 +0900"

変数「$day」を「2006 年 3 月 22 日 (Wed) 19 : 20 : 50」の形式に変換するには以下の命令になります。「Y」は4桁の年、「n」は1〜12までの月、「j」は1〜31までの日、「D」はSun〜Satまでの英語の曜日、「H」は 2 桁の 24 時間制の時間、「i」は00〜59までの分、「s」は 00 〜 59 までの秒に変換します。


date('Y 年 n 月 j 日 (D) H : i : s',strtotime($day))

出力したい場合は以下。


print ("".date('Y 年 n 月 j 日 (D) H : i : s',strtotime($day))."");

変数「$day」に代入するなら以下。


$day = date('Y 年 n 月 j 日 (D) H : i : s',strtotime($day));

「2006/03/22」に変換したい場合は以下。


date('Y/m/j',strtotime($day))

「'Y/m/j'」の記号を変更するだけ表示を変更できます。よく使うフォーマットは以下。


指定する文字 機能
a am か pm を表す
A AM か PM を表す
d 2桁の日付 01 〜 31
D 3文字の曜日 Sun 〜 Sat
F 月名 January 〜 December
g 1桁の12時間制の時間 1 〜 12
G 1桁の24時間制の時間 0 〜 23
h 2桁の12時間制の時間 01 〜 12
H 2桁の24時間制の時間 00 〜 24
i 2桁の分 00 〜 59
j 1桁の日 1 〜 31
l フルネームの曜日 Sunday 〜 Saturday
m 2桁の月 01 〜 12
M 3文字の月 Jun 〜 Dec
n 1桁の月 1 〜 12
s 2桁の秒数 00 〜 59
w 数値の曜日 0 (Sunday) 〜 6 (Suturday)
Y 4桁の年 2006
y 2桁の年 06

掲示板の投稿データに含める日付の形式2・・・





BTOパソコン・ゲームPC・自作パソコンなら【TSUKUMO】 - 自作PCに必要なパーツ、豊富な品揃え

Copyright © 2013 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項