スレッド表示 | フラット表示〕 全トピック 920 件中 451 番目 次≫ ≪前

日付の差について

created: 2005-03-31 17:31 | modified: 2005-04-04 15:12 | reply: 7

[2222] 日付の差について

user: hiro | created: 2005-03-31 17:31
日付に関して教えていただけたらと思います。

環境 php4.0.3 + postgre7.0.3

現在、ユーザーの登録日から現在までの期間を表示させようとしています。

$m_year=2004
$m_mouth=1
$m_day=1 が入力されています。

$gen=(mktime(0,0,0,date("m"),date("d"),date("Y"))-mktime(0,0,0,$m_mouth,$m_day,$m_year));
print"$gen";   ブラウザには 39312000 と表示

$day=date("y-m-d",$gen);
print"$day";   71-04-01と表示されています。

期間を表示させたいので
1年3ヶ月となるようにしたいのですが、
どうしたらいいのかわかりません。

よろしくお願いします。
reply: 2223 返信 編集 削除

[2223] データベース

user: Smarty | created: 2005-03-31 19:37
PostgreSQLが使えるなら、

SELECT age(timestamp '1957-06-13');

結果
47 years 9 mons 18 days

SELECT age(timestamp '1957-06-13');

結果
47 years 9 mons 18 days

> $m_year=2004
> $m_mouth=1
> $m_day=1 が入力されています


$sql = sprintf("SELECT age(timestamp '%d-%d-%d')", $m_year, $m_mouth, $m_day);

$result = pg_query($conn, $sql);

$age = array_shift(pg_fetch_assoc($result));
Parent: 2222  reply: 2224 2227 返信 編集 削除

[2224] Re.データベース

user: hiro | created: 2005-03-31 20:44
> PostgreSQLが使えるなら、
>
> SELECT age(timestamp '1957-06-13');
>
> 結果
> 47 years 9 mons 18 days
>
> SELECT age(timestamp '1957-06-13');
>
> 結果
> 47 years 9 mons 18 days

psqlで記述した場合、結果が上記のようになることは、確認しています。
これをどうすれば、phpと組み合わせができるのかわかりません。

> $sql = sprintf("SELECT age(timestamp '%d-%d-%d')", $m_year, $m_mouth, $m_day);
>
> $result = pg_query($conn, $sql);
>
> $age = array_shift(pg_fetch_assoc($result));

上記の中の$connとはどこの変数になるのですか。
Parent: 2223  reply: 2225 2226 返信 編集 削除

[2225] 秒数

user: Smarty | created: 2005-03-31 21:52
> 環境 php4.0.3 + postgre7.0.3
とあるので、普通はデータベースが使えていると考えます。

使うことが出来ないのなら

> $m_year=2004
> $m_mouth=1
> $m_day=1 が入力されています。
>
> $gen=(mktime(0,0,0,date("m"),date("d"),date("Y"))-mktime(0,0,0,$m_mouth,$m_day,$m_year));
>
> print"$gen";   ブラウザには 39312000 と表示

//こんなのもある
//$gen = (time() - strtotime($m_year.'-'.$m_mouth.'-'.$m_day));

39312000 これは差分の秒数なので

60で割れば分に。(割り切れないときは秒が残る?小数以下を×60)
3600で割れば時間に。(割り切れないときは分が残るので逆算して再度分までを求める?桁上げを忘れずに)
3600*24で割れば日数。(割り切れないときは時間が残るので逆算して再度時間までを求める)
後は閏年など考慮に入れながら実装する。
(じゃまくさそう)

<?php

//求める日付の精度が「日」なので、時間は現在時を出しておけば良いですね。

$ymd = explode('-', '2004-04-01');

$ymd =& array_map('intval', $ymd);

$gen = (time() - strtotime($ymd[0].'-'.$ymd[1].'-'.$ymd[2]));

$sec = $gen%60;
//切り捨て int にキャスト
$day = (int)($gen/60/60/24);

echo 'sec '. $sec;
echo '<br />';
echo 'day '. $day;

//何ヶ月と何日?と言われると苦しいな。
//可能ですけど、はいよ、っと出せるほど簡単な仕事じゃないな。
Parent: 2224  返信 編集 削除

[2226] pg_connect

user: Smarty | created: 2005-04-01 01:01
上の「秒数」も編集しました。

> 上記の中の$connとはどこの変数になるのですか。

普段からPHPでデータベースを扱っているなら、$conn はデータベースとのコネクションだと連想出来るはず。
それが理解できないようですので、まずは下記を参照。

http://jp2.php.net/manual/ja/function.pg-connect.php
Parent: 2224  返信 編集 削除

[2227] ありがとうございました。

user: hiro | created: 2005-04-01 20:01
SELECT ageしたあと、フォーマットすればよかったのですね。

1year 3monsと表示されていました。

上記のようなやり方で求めた期間を
比較させようとするとエラーがでてうまくできません。

1年6ヶ月未満かどうか比較させるには、どうしたらよろしいでしょうか。
Parent: 2223  reply: 2228 返信 編集 削除

[2228] 比較

user: Smarty | created: 2005-04-02 16:57
> 比較させようとするとエラーがでてうまくできません。
何と何をどのように比較してどのようなerrorが出たのか想像しろと?
せめてご自分の試した内容と結果の内容くらい書きましょう。

結論だけを望んでいるのなら。

1年6ヶ月と1year 3monsを数値化して比較する。
strtotime(1年6ヶ月) > strtotime(1year 3mons);
Parent: 2227  reply: 2229 返信 編集 削除

[2229] すいません。

user: hiro | created: 2005-04-04 15:12
数値化することで、解決できました。
ありがとうございました。

質問等の仕方についても注意することを心がけます。
Parent: 2228  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 451 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑