• : Function split() is deprecated in /var/www/drupal-5.23/modules/filter/filter.module on line 1206.
  • : Function split() is deprecated in /var/www/drupal-5.23/modules/filter/filter.module on line 1206.

PHP で、UNIX タイムを得る、変換する。

PHP で、yyyy/mm/dd hh:nn 形式の日付から UNIX タイムを調べたり、逆に UNIX タイムから yyyy/mm/dd hh:nn の日付を調べる簡単なスクリプトを作ったので、参考にしてみて欲しい。以下のスクリプトを date.php とかのファイル名で保存して、http://yourdomain.com/date.php にアクセスする。 基本は、
PHP で、yyyy/mm/dd hh:nn 形式の日付から UNIX タイムを調べたり、逆に UNIX タイムから yyyy/mm/dd hh:nn の日付を調べる簡単なスクリプトを作ったので、参考にしてみて欲しい。以下のスクリプトを date.php とかのファイル名で保存して、http://yourdomain.com/date.php にアクセスする。 基本は、

PHP で、日時のフォーマットをチェックする方法

まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、
^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$
となる。 preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に
まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、
^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$
となる。 preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に

Linux で、システムのタイムゾーンを設定する方法

GUI なしの Linux でシステム自体のタイムゾーンをコンソール(コマンドライン)だけで設定するには、ルート(root)権限が必要である。以下のようにする。
GUI なしの Linux でシステム自体のタイムゾーンをコンソール(コマンドライン)だけで設定するには、ルート(root)権限が必要である。以下のようにする。

PHP で、タイムゾーン (timezone) を使って時差を修正した時刻を得る方法

PHP 5.1.1 or higher からは、
<?php

bool date_default_timezone_set
( string timezone_identifier )

?>
という関数が使えるらしいが、PHP 4.4.2 or lower などでは、
<?php

$TZ
= '-8' // PST

// yyyy/mm/dd hh:nn フォーマットにする
$date = gmdate('Y/m/d H:i', time() + 3600 * ($TZ + date('I')));

print
$date;

?>
または、
<?php

$TZ
= '-8' // PST

// 単なる時刻シリアル値
$NOW = time() - date('Z') + 3600 * ($TZ * date('I'));

print
$NOW;

?>
とするのだろうか? イマイチ自信がないが、上の式でとりあえず夏時間(Daylight Saving Time)も考慮しているからとりあえず良しとしよう(良い方法があったらどなたか教えてください)。
PHP 5.1.1 or higher からは、
<?php

bool date_default_timezone_set
( string timezone_identifier )

?>
という関数が使えるらしいが、PHP 4.4.2 or lower などでは、
<?php

$TZ
= '-8' // PST

// yyyy/mm/dd hh:nn フォーマットにする
$date = gmdate('Y/m/d H:i', time() + 3600 * ($TZ + date('I')));

print
$date;

?>
または、
<?php

$TZ
= '-8' // PST

// 単なる時刻シリアル値
$NOW = time() - date('Z') + 3600 * ($TZ * date('I'));

print
$NOW;

?>
とするのだろうか? イマイチ自信がないが、上の式でとりあえず夏時間(Daylight Saving Time)も考慮しているからとりあえず良しとしよう(良い方法があったらどなたか教えてください)。

Perl で、誕生日を求める。

my $now = time; とすれば、$now に 「1970 年 1 月 1 日から現在までの秒数」 の値が入る。そこで、ある人の誕生日を 1970 年からの秒数としてデータベースに保存してある場合は、現在の時刻から誕生日の時刻を引き算してあげて年(365 日)、日(24 時間)、時(60 分)、分(60 秒)で割ってあげた整数値(int)を計算すれば、誕生日が求まるような気がする。しかしすぐに気づくのだがこの方法だけではうるう年が勘案されていないから、正確な誕生日は求められない。単純に 365 で割ったのでは誤差が出てしまうのである。 そこでどうすればいいかというと、365 という値を 「1年の正確な日数」 にして割ればよい。1 年というのは正確には 365.2425 日らしいので、「生年月日から現在までの日数」 を 「365.2425」 で割れば、正確な年齢を求めることができる。
#!/usr/bin/perl -w

use Time::Local;

$year = 1980;
$mon = 8;
$day = 24;

my $birthday = timelocal(0, 0, 0, $day, $mon - 1, $year);
$age = int((time - $birthday) / 365.2425 / 24 / 60 / 60);

print $age;

1;
my $now = time; とすれば、$now に 「1970 年 1 月 1 日から現在までの秒数」 の値が入る。そこで、ある人の誕生日を 1970 年からの秒数としてデータベースに保存してある場合は、現在の時刻から誕生日の時刻を引き算してあげて年(365 日)、日(24 時間)、時(60 分)、分(60 秒)で割ってあげた整数値(int)を計算すれば、誕生日が求まるような気がする。しかしすぐに気づくのだがこの方法だけではうるう年が勘案されていないから、正確な誕生日は求められない。単純に 365 で割ったのでは誤差が出てしまうのである。 そこでどうすればいいかというと、365 という値を 「1年の正確な日数」 にして割ればよい。1 年というのは正確には 365.2425 日らしいので、「生年月日から現在までの日数」 を 「365.2425」 で割れば、正確な年齢を求めることができる。
#!/usr/bin/perl -w

use Time::Local;

$year = 1980;
$mon = 8;
$day = 24;

my $birthday = timelocal(0, 0, 0, $day, $mon - 1, $year);
$age = int((time - $birthday) / 365.2425 / 24 / 60 / 60);

print $age;

1;