Top > システム > PHP

2012年03月05日

UNIX時間変換

phpプログラムでUNIXタイムスタンプを操作することがあったので、簡単なプログラムを作成しました。

OSの2038年問題を調べるツールにも使えると思います。たとえば、UNIXタイムの欄に2147483648 を入力した場合、2038/01/19 12:14:08 となれば、time_t型が、64bitに拡張されていますので、そのシステムとphp処理系は問題ないと思われます。

ちなみにこのサーバは、32bitのlinuxですので、未対応でした。

時刻がUTCかJSTかは、OSのロケールに依存すると思いますので、UNIXタイムに0 を入力したとき、1970/01/01 09:00:00 となれば、JST。1970/01/01 00:00:00 ならUTCです。

phpで作成したサンプルプログラムのデモ

ソースコード phpTime.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>UNIXタイムスタンプ・コンバータ</title>
</head>
<body>
	<?php
		$unix = $_POST['unix'];
		$string = $_POST['string'];
		// タグの埋め込みを無効化する。
		$unix = htmlspecialchars($unix);
		$string = htmlspecialchars($string);
		if(empty($unix)) $unix = 0;
		if(empty($string)) $string = strftime('%Y/%m/%d %H:%M:%S', 0);
		if(isset($_POST['UtoS'])){
			// unixタイムスタンプから日付の文字列表示
			$string = strftime('%Y/%m/%d %H:%M:%S', $unix);
			$wareki = warekiHenkan($unix);
		}
		if(isset($_POST['StoU'])){
			// 日付の文字列表示からunixタイムスタンプ
			$unix = strtotime($string);
			$wareki = warekiHenkan($unix);
		}
		if(isset($_POST['Now'])){
			// 日付の文字列表示からunixタイムスタンプ
			$unix = time();
			$string = strftime('%Y/%m/%d %H:%M:%S', $unix);
			$wareki = warekiHenkan($unix);
		}

 		function warekiHenkan($u){
			// $u: unixタイムスタンプ
			// 返値: 和暦の文字列
			$ul = localtime($u, TRUE);
			$ul["tm_year"] = $ul["tm_year"] + 1900;
			$ul["tm_mon"] = $ul["tm_mon"] + 1;
 			if($u < -1812186000){
				// 明治かそれ以前
				$s = "明治" . ($ul["tm_year"] - 1867);
			}else if($u < -1357635600){
				// 大正
				$s = "大正" . ($ul["tm_year"] - 1911);
			}else if($u < 600188400){
				// 昭和
				$s = "昭和" . ($ul["tm_year"] - 1925);
			}else{
				// 平成
				$s = "平成" . ($ul["tm_year"] - 1988);
			}
			return sprintf("%s年%d月%d日 %d時%d分%d秒",
			$s,$ul["tm_mon"],$ul["tm_mday"],$ul["tm_hour"],$ul["tm_min"],$ul["tm_sec"]);
 		}
 	?>
	<p>unixタイムスタンプと日付の文字列表示を相互変換します。</p>
	<p>
		1901(明治34年)/12/14 05:45:52 (-2147483648) 以前の日時はエラーとなります。<br />
		2038(平成50年)/01/19 12:14:07 ( 2147483647) 以降の日時はエラーとなります。<br />
		もしエラーにならない場合、2038年問題に対応したシステムかつphpプログラムと思われます。<br />
		<br />
		1868/09/08 から 1912/07/29 = 明治元年から明治 45 年<br />
		1912/07/30 から 1926/12/24 = 大正元年から大正 15 年<br />
		1926/12/25 から 1989/01/07 = 昭和元年から昭和 64 年<br />
		1989/01/08 から現在 = 平成元年から現在
	</p>
	<form action="phpTime.php" method="POST">
		<table cellspacing="8">
		<tr>
			<td>
				unixタイムスタンプ:
			</td>
			<td>
				&nbsp;
			</td>
			<td>
				日付の文字列表示:
			</td>
		</tr>
		<tr valign="top">
			<td>
				<input type="text" name="unix" size="20" value="<?= $unix ?>" />
			</td>
			<td align="center">
				<input type="submit" name="UtoS" value="→" style="width:3em;" /><br /><br />
				<input type="submit" name="StoU" value="←" style="width:3em;" /><br /><br />
				<input type="submit" name="Now" value="現在時刻" />
			</td>
			<td>
				<input type="text" name="string" size="20" value="<?= $string ?>" /><br />
				<br />和暦:<br /><?= $wareki ?><br />
			</td>
		</tr>
		</table>
	</form>
</body>
</html>

 

検索


Feed

Really Simple Syndication 2.0 The Atom Syndication Format Really Simple Discoverability