
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
俺だったら他の回答者と違ってMySQLを使っているならPHP側で処理させずにMySQL側の関数で処理するね。
単純に年だけで見て算数するなら
select (YEAR(NEW()) - YEAR(作成日)) as 年数 ~
しっかりと日付も考慮して計算するなら(ただし閏年の計算は省くので一年365日として計算する)
select TRUNCATE((TO_DAYS(NEWS() - TO_DAYS(作成日)) / 365,0) as 年数 ~
こんな感じかな。テストしてないので自分で確認してくれ。
No.4
- 回答日時:
作成日が文字列なのかなと言うことで、こんな感じでどうでしょう。
---------------------------------------------------------------------
$date1 = '2010-8-09';//作成日:1
$date2 = '2012-10-26';//現在:2
list($Y1,$M1,$D1) = sscanf($date1,'%d-%d-%d');//作成日を年、月、日に分割:3
list($Y2,$M2,$D2) = sscanf($date2,'%d-%d-%d');//現在を年、月、日に分割:4
$a = JDToUnix(gregorianToJD($M1,$D1,$Y1));//作成日のUNIXタイムを求める:5
$b = JDToUnix(gregorianToJD($M2,$D2,$Y2));//現在のUNIXタイムを求める:6
$c = $b-$a;//現在と作成日の差を求める:7
$y = floor($c/(60*60*24*365));//1年間の秒数で割り小数点以下切捨て:8
---------------------------------------------------------------------
2の現在の日付は文字列としてますが、date関数とかで年月日をとりだして4に当てはめてください。
8で1年間を365日にしてますが、うるう年が含まれていても特に問題ないと思います。
No.3
- 回答日時:
MySQLから取り出すときにdate_formatを通して、yyyymmddの形式で取り出すと楽です。
現在日付もdate('Ymd')で取得しておけば、各々のintvalの差を10000で割る(端数切り捨て)で求められます。#元日付が2/29だと、2/28では1年に満たないのは上手く工夫するしかないです(汗
(例)
date型のカラム xxxdate を、$row['date_xxx'] に date_format('%Y%m%d', xxxdate) として取得したとして、
$now = date('Ymd');
$ydiff = floor((intval($now) - intval($row['date_xxx'])) / 10000);
No.2
- 回答日時:
経過年というのは意外にめんどう
(1)作成日の月が現在の月より大きければ年の差-1
(2)同、小さければ年の差
(3)作成日の月と現在の月が同じの場合、日付が大きければ年の差-1
(4)同、日付が小さければ年の差
(5)同、日付が同じ場合はどうするかきめる
くらいの場合分けが必要です
例外的なうるう年の2/29から翌年の3/1はどうするのかとか仕様がむずかしい
No.1
- 回答日時:
DATE型……ですかね?
とりあえずさっくり作ってみました(未検証)
/************************************
@param baseDate : 基準の日付
@param baseDate : 比較対象の日付
return 差分の年数を返却
************************************/
function calcDate($baseDate, $futureDate){
//区切り文字を指定し配列と化す
$arrDate1 = explode("-", $baseDate);//ベースの日付
$arrDate2 = explode("-", $futureDate);//比較対象
//指定した日時のUNIXタイムスタンプを取得する
$cd = mktime(0, 0, 0, $arrDate1[1], $arrDate1[2], $arrDate1[0]);//正規化
$fd = mktime(0, 0, 0, $arrDate2[1], $arrDate2[2], $arrDate2[0]);//正規化
if($cd > $fd){
$diff = $cd - $fd;
}else{
$diff = $fd - $cd;
}
return date("Y年", $dt);
}
ただし注意としては
explodeはあくまで区切り文字を指定して配列化するだけなので
タイムスタンプを対象にすると日付が狂います
例:yyyy-mm-dd hh:mm:ss
arr[0]:yyyy
arr[1]:mm
arr[2]:dd hh:mm:ss
この場合日付に日付以外の時間などが入ります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でシステム日付との差を...
-
C言語を使って、ある特定の日の...
-
日付を米国式から日本式に変換...
-
開始と終了を指定して、その間...
-
strtotime 前月・前々月の表示
-
ファイル名に日付の挿入
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
excel access連携 このテーブル...
-
findstrのerrorlevel
-
【C#】DataGridViewの最大列数...
-
shシェルスクリプト 空白行の...
-
json_encodeが表示しない
-
ps3で久しぶりにCDの音楽情報取...
-
wordの差し込み印刷で文字...
-
POSTされたかどうか確かめる方...
-
バッチファイルで、全てのウィ...
-
Google chart API 、PHP、MySQL...
-
PHPでログイン人数を制限したい
-
バッチファイルでpingの結果を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
日付データを比較して出力したい!
-
日付の比較
-
子ノードの出力について
-
"0412" を "04" と "12" で区切る
-
「20100101」を「2010/01/01」...
-
AND検索のスクリプト記述方法(...
-
アップロードしたファイル名に...
-
timestamp(14)のフォーマットに...
-
PHP に詳しい方教えてください
-
現在時刻をyyyymmddhhmmss形式...
-
2011-08-18>2011年 8月18日(木)
-
date関数の漢字フォーマット
-
DBから昨日以前の日付のデータ...
-
前月の取得について
-
WP 日時で分岐して表示を変えたい
-
日付の比較方法
-
C言語を使って、ある特定の日の...
-
MS-DOSコマンドのリダイ...
おすすめ情報