A 回答 (5件)
- 最新から表示
- 回答順に表示
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
この場合日付に日付以外の時間などが入ります
No.2
- 回答日時:
経過年というのは意外にめんどう
(1)作成日の月が現在の月より大きければ年の差-1
(2)同、小さければ年の差
(3)作成日の月と現在の月が同じの場合、日付が大きければ年の差-1
(4)同、日付が小さければ年の差
(5)同、日付が同じ場合はどうするかきめる
くらいの場合分けが必要です
例外的なうるう年の2/29から翌年の3/1はどうするのかとか仕様がむずかしい
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.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.5
- 回答日時:
俺だったら他の回答者と違ってMySQLを使っているならPHP側で処理させずにMySQL側の関数で処理するね。
単純に年だけで見て算数するなら
select (YEAR(NEW()) - YEAR(作成日)) as 年数 ~
しっかりと日付も考慮して計算するなら(ただし閏年の計算は省くので一年365日として計算する)
select TRUNCATE((TO_DAYS(NEWS() - TO_DAYS(作成日)) / 365,0) as 年数 ~
こんな感じかな。テストしてないので自分で確認してくれ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- MySQL [XAMPP Control Panel v3.2.4] 最新ではないみたいです。何処かに? 2 2022/06/01 14:33
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- Excel(エクセル) Excel2019、2021の売り上げなどの集計表について 4 2022/11/29 14:03
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
開始と終了を指定して、その間...
-
掲示板のIDのPHPによる実装方法...
-
Java Scriptで、ある日付に加算...
-
昨日の日付を取得するVBscript
-
PHP 指定した期間だけ表示した...
-
ナベアツプログラム(3の倍数...
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
-
バッチファイルでpingの結果を...
-
Yahoo! JAPAN IDを新規取得でき...
-
WordでExcelデータを差込...
-
format関数について
-
switch()文で値の大小比較
-
Dosブロンプトでtabを出力したい
-
EXCEL、マクロ-改ページ行番号...
-
【C#】DataGridViewの最大列数...
-
イベントログ情報の取得順番に...
-
ミュージックのアートワークを...
-
GETのメリットについて
-
VB.NETからVBAマクロ(引数)を呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
PHPで以下のような占いプログラ...
-
C言語を使って、ある特定の日の...
-
substrの使い方について教えて...
-
一週間の表示の仕方と文字表示
-
アップロードしたファイル名に...
-
第何週かを取得したい
-
プルダウンメニューの値をDBに...
-
PHPでカレンダーを作る(縦書き)
-
日付によって画像を変える
-
差分の月数を算出する方法
-
SQL:TIMESTAMPの期間検索を指...
-
C言語でシステム日付との差を...
-
PHP 指定した期間だけ表示した...
-
プルダウンで今日以降の日付を...
-
Accessコンボボックス
-
MovableTypeで、ある日付を過ぎ...
-
Java Scriptで、ある日付に加算...
おすすめ情報