質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.33%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

305閲覧

Q&A掲示板で回答の日時を取得したいのですがどのように計算できるのでしょうか?

homepage-site

総合スコア60

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2025/02/05 07:51

編集2025/02/05 07:52

実現したいこと

回答の日時を現在から○日前という形で表示したい。

発生している問題・分からないこと

MySQLで〜日前を取得する方法とMySQLで何ヶ月前、何日前などの日時を取得する方法は探すことが出来たのですが、日時を計算する方法が分からず困っております。

該当のソースコード

PHP

1/* 回答タイトルとスタンプ画像なし(回答掲示板) */ 2function bbs_answer_confirm() 3{ 4 // 新しいセッションを開始、あるいは既存のセッションを再開する 5 session_start(); 6 // 何もせず終わる処理 7 if (empty($_SESSION['text'])) { 8 exit; 9 } 10 // $wpdbでSQLを実行 11 global $wpdb; 12 /* ここから(1) */ 13 $unique_id = $_SESSION['unique_id']; 14 $sql = 'SELECT * FROM sortable WHERE unique_id = %s'; 15 $query = $wpdb->prepare($sql, $unique_id); 16 $rows = $wpdb->get_results($query); 17 // rows[0]は配列の最初の要素にアクセス 18 $parent_id = $rows[0]->id; 19 /* ここまで(1) */ 20 // どのようなデータをどのテーブルに登録するか 21 $sql = 'INSERT INTO sortable(parent_id,text,name,ip) VALUES(%d,%s,%s,%s)';/* (2) */ 22 // セッション変数に登録 23 $text = $_SESSION['text']; 24 $name = $_SESSION['name']; 25 //$title = $_SESSION['title']; 26 //$stamp = $_SESSION['stamp']; 27 // ipアドレスを取得する 28 $ip = $_SERVER['REMOTE_ADDR']; 29 $query = $wpdb->prepare($sql, $parent_id, $text, $name, $ip);/* (2) */ 30 // プリペアードステートメントを用意してから、下記のようにresultsで値を取得 31 $query_result = $wpdb->query($query); 32 $result = []; 33 // 条件式が成り立った場合処理を実行 34 if ( 35 false === $query_result 36 ) { 37 $result['error'] = '登録できませんでした' . $wpdb->last_error; 38 // 条件式が成り立たなければ処理を実行 39 } else { // どのテーブルの何をどう更新するか 40 // カラム名 unique_id の質問UUID を一度そのデータを読み込んで取得する 41 $sql = 'SELECT unique_id FROM sortable WHERE id = %d'; 42 $query = $wpdb->prepare($sql, $wpdb->insert_id); 43 $rows = $wpdb->get_results($query); 44 $unique_id = $rows[0]->unique_id; 45 46 // アップロードディレクトリ(パス名)を取得する 47 $upload_dir = wp_upload_dir(); 48 // 『filenames』を記述して配列名を記述し、それに『[]』を代入すればそれは配列として扱われます 49 $filenames = []; 50 foreach ($_SESSION['attach']['tmp_name'] as $i => $tmp_name) { 51 if (empty($tmp_name)) { 52 $filenames[$i] = ''; 53 } else { 54 $type = explode('/', $_SESSION['attach']['type'][$i]); 55 $ext = $type[1]; 56 if (3 == $i) { // 比較した時に3+1以上なら 57 $n = 'usericon'; 58 } else { 59 $n = $i + 1; 60 } 61 $filenames[$i] = "{$unique_id}_{$n}.{$ext}"; 62 $attach_path = $upload_dir['basedir'] . '/attach/' . $filenames[$i]; 63 // 文字列をファイルに書き込む、文字列データを書き込むファイル名を指定 64 file_put_contents($attach_path, $_SESSION['attach']['data'][$i]); 65 } 66 } 67 $sql = 'UPDATE sortable SET attach1=%s,attach2=%s,attach3=%s,usericon=%s WHERE id=%d'; 68 $query = $wpdb->prepare($sql, $filenames[0], $filenames[1], $filenames[2], $filenames[3], $wpdb->insert_id); 69 $wpdb->query($query); 70 $result['error'] = ''; 71 } 72 header('Content-type: application/json; charset=UTF-8'); 73 echo json_encode($result); 74 exit; 75} 76add_action('wp_ajax_bbs_answer_confirm', 'bbs_answer_confirm'); 77add_action('wp_ajax_nopriv_bbs_answer_confirm', 'bbs_answer_confirm');

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

前回の質問で再帰SQL を使い Q&A掲示板の質問、回答、返信機能をツリー型で完成させるためにコードを修正いたしました。
MySQLで〜日前を取得する方法を参考にコードを書いていたのですが、日時を計算するコードとしては使えないのではないかと思い中断しております。

// MySQLで〜日前を取得する方法 // 例えば%sのところに数値を入れるとエラーになる $sql = 'SELECT unique_id FROM sortable WHERE ts = %d'; // "sortable" テーブルに自動生成されたidフィールドがあるとします。最後のクエリからIDを返します。 $query = $wpdb->prepare($sql, $wpdb->insert_id); $rows = $wpdb->get_results($query);

補足

※ 参考サイト
※ MySQLで〜日前を取得する方法
https://job-info.hateblo.jp/entry/2024/09/03/150314#MySQL%E3%81%A7%E6%97%A5%E5%89%8D%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

※ MySQLで何ヶ月前、何日前などの日時を取得する方法
https://crystal-base.hatenablog.com/entry/2020/05/22/203958

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2025/02/05 08:09

> MySQLで〜日前を取得する方法を参考にコードを書いていたのですが、日時を計算するコードとしては使えないのではないかと思い中断しております。 「MySQLで」実現しなければならない事情はありますか?
homepage-site

2025/02/05 08:14

maisumakunさん回答ありがとうございます。 コードを調べた際に MySQL で実行する方法が出てきたというだけで特にそのような理由はありません。
maisumakun

2025/02/05 08:15

では、「PHPで」計算する方法について調べてみれば、また見えるものがあるかもしれないです。
utm.

2025/02/05 09:23

現在日付から引いて、その結果をマッピングして漏れたらただの日付を表示すればいいと思う。 SQLでも出来ると思うけれど、表示上の意味はあってもデータとしての意味が損なわれるから、あとの事考えるとめんどくさいのではと思う。 まあ、日付データと表示データ2つ取得してもいいけれど
homepage-site

2025/02/05 12:45

maisumakunさん回答ありがとうございます。 調べてみます。
homepage-site

2025/02/05 12:56

utm.さん回答ありがとうございます。 現在日付から回答された日時を引くという意味だと思うのですが、SQL を使わずに回答の日時を割り出せるのでしょうか? yambejp さんの回答を参考にコードを書いてみたのですが、データとしての正確性がないのであれば別の方法に変更したいと考えております。 ※ yambejpさんのコードを参考に書いたコード // 例えば%sのところに数値を入れるとエラーになる // どのようなデータをどのテーブルに登録するか $sql = 'INSERT INTO sortable(parent_id,ts,text,name,ip) VALUES(%d,%d,%s,%s,%s)';/* (2) */ // セッション変数に登録 $text = $_SESSION['text']; $name = $_SESSION['name']; //$title = $_SESSION['title']; //$stamp = $_SESSION['stamp']; $result = []; $result['ts'] = $ts; // 回答の日時を取得する $diff= time()-strtotime($ts); // ipアドレスを取得する $ip = $_SERVER['REMOTE_ADDR']; $query = $wpdb->prepare($sql, $parent_id, $ts, $text, $name, $ip);/* (2) */ // プリペアードステートメントを用意してから、下記のようにresultsで値を取得 $query_result = $wpdb->query($query); // $result = []; // $result['ts'] = $ts; print gmdate('h:i:s',$diff);
guest

回答1

0

ベストアンサー

検索条件にしたいのか、結果がほしいのかによって微妙にちがいますね
PHPだけの処理であればこう

PHP

1<?PHP 2date_default_timezone_set('Asia/Tokyo'); 3$str="2025/01/02 3:4:5"; 4$diff= time()-strtotime($str); 5$oneday=60*60*24; 6if($diff < $oneday){ 7 print gmdate("H:i",$diff); 8}else{ 9 print intval($diff/$oneday)."days"; 10}

投稿2025/02/05 08:43

yambejp

総合スコア117203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

homepage-site

2025/02/05 12:50

yambejpさん回答ありがとうございます。 質問に対する回答の日時を取得したいのですが、その場合は SQL の検索条件に限定されるのではないでしょうか? ※ yambejpさんのコードを参考に書いてみました。 // 例えば%sのところに数値を入れるとエラーになる // どのようなデータをどのテーブルに登録するか $sql = 'INSERT INTO sortable(parent_id,ts,text,name,ip) VALUES(%d,%d,%s,%s,%s)';/* (2) */ // セッション変数に登録 $text = $_SESSION['text']; $name = $_SESSION['name']; //$title = $_SESSION['title']; //$stamp = $_SESSION['stamp']; $result = []; $result['ts'] = $ts; // 回答の日時を取得する $diff= time()-strtotime($ts); // ipアドレスを取得する $ip = $_SERVER['REMOTE_ADDR']; $query = $wpdb->prepare($sql, $parent_id, $ts, $text, $name, $ip);/* (2) */ // プリペアードステートメントを用意してから、下記のようにresultsで値を取得 $query_result = $wpdb->query($query); // $result = []; // $result['ts'] = $ts; print gmdate('h:i:s',$diff);
yambejp

2025/02/06 00:10

ちょっと何を希望されているか図りかねます 私の回答はあくまで指定された日時の文字列と現時刻の経過を、n日もしくは時分で表示すること 検索条件に使うならを指定して登録時間と現時刻にintervalでn日をとってbetweenや不等号で条件づけします
homepage-site

2025/02/11 10:25

yambejpさん回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.33%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問