実現したいこと
回答の日時を現在から○日前という形で表示したい。
発生している問題・分からないこと
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

回答1件
あなたの回答
tips
プレビュー