サンプル集  >  PHP  >  日付の計算
日付の計算
2008/07/03

日付の計算をしなければならない機会は意外と多いです。そこで計算する方法を調べます。

◆環境
OS Windows XP Professional Version 2002 Service Pack 2
PHP 5.2.4

日付の計算

date関数とstrftime関数で日付を取得して表示してみます。

php009.php
1: 
2: 
3: 
4: 
<?php
    echo date("Y-m-d H:i:s");
    echo strftime("%Y-%m-%d %H:%M:%S");
?>

◆実行結果
>php php009.php
2008-07-03 15:24:202008-07-03 15:24:20

改行を入れ忘れてしまったので日付が1行で表示されてしまいました。

文字列を日付にもできるようです。

php010.php
1: 
2: 
3: 
4: 
5: 
<?php
    $date=strptime("2008-07-03 15:26:20""%Y-%m-%d %H:%M:%S");
    echo $date[year]."-".$date[mon]."-".$date[mday]
    ." ".$date[hours].":".$date[minutes].":".$date[seconds];
?>

◆実行結果
>php php010.php

Fatal error: Call to undefined function strptime() in php010.php on
 line 2

エラーがでました。 調べたところ、この関数は Windows環境にはまだ実装されていないようです。 Linux環境で試してみます。

$ php php010.php
PHP Fatal error:  Call to undefined function:  strptime() in php010.php
 on line 2

Fatal error: Call to undefined function:  strptime() in php010.php on
 line 2

同じエラーが出ました。

phpのバージョンを確認します。

$ php --version
PHP 5.0.5 (cli) (built: Feb  9 2006 10:22:15)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.5, Copyright (c) 1998-2004 Zend Technologies
    with Zend Core v1, Copyright (c) 1998-2005, by Zend Technologies
    with Zend Extension Manager v1.0.9, Copyright (c)
 2003-2005, by Zend Technologies
    with Zend Optimizer v2.6.2, Copyright (c) 1998-2006, by Zend
 Technologies
    with Zend Debugger v5.1.0, Copyright (c) 1999-2006, by Zend
 Technologies

strptimeの説明みたいなページに「(PHP 5 >= 5.1.0)」って書いてありました。 phpが5.1.0以上でないといけないという事でしょうか。

mktimeで代用できるかもしれません。

php011.php
1: 
2: 
3: 
4: 
<?php
    $date=mktime(15,41,3,7,3,2008);
    echo date("Y-m-d H:i:s", $date)."\n";
?>

◆実行結果
>php php011.php
2008-07-03 15:41:03

できました。

mktimeはUNIXのタイムスタンプを返します。 これを使って日付の計算ができるようです。 今日の日付から指定された日数後の日付を表示するプログラムを作ってみます。

php012.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
<?php
    // 今日の日付を取得
    $today=getdate();

    // UNIXのタイムスタンプを取得
    $date=mktime($today[hours]
                ,$today[minutes]
                ,$today[seconds]
                ,$today[mon]
                ,$today[mday]
                ,$today[year]
                );

    // n日後を計算
    $new_date=$date+($argv[1]*60*60*24);

    echo "今日\t".date("Y-m-d H:i:s", $date)."\n";
    echo $argv[1]."日後\t".date("Y-m-d H:i:s", $new_date)."\n";
?>

◆実行結果
>php php012.php 1
今日    2008-07-03 15:58:10
1日後   2008-07-04 15:58:10

>php php012.php 10
今日    2008-07-03 15:58:12
10日後  2008-07-13 15:58:12

>php php012.php 365
今日    2008-07-03 15:58:14
365日後 2009-07-03 15:58:14

計算できました。


2023/07/31 追記

PHP 8.0.12でphp012.phpを実行したところエラーがでたので直しました。>>>日付の計算

▲ PageTop  ■ Home


Copyright (C) 2013 - 2023 ymlib.com