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

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

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

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

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

Q&A

解決済

1回答

715閲覧

PHP datetime関連値固定

GPE46232209

総合スコア14

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

PHP

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

0グッド

1クリップ

投稿2021/08/15 15:39

編集2021/08/16 06:51

前提・実現したいこと

もっと細かく書くことにしました。
1日後、2日後、、、7日後、8日後と定期的に
SQLでデータのカウントの値を保持するというプロセスを作成しようとしています。
まずは
初期値を今と固定して、そこから1日ずつデータを保持して8日後になれば、
データを別のところへ移し、保持していたデータベースデータと固定していた今の時間の
ものをリセットしてまたカウントするというものです。
ただ今考えれば、ソースだけではDBでの現在位置の時間が保持できないためどうしようかと考えています。どう考えても保持することは難しいので、今のところDBにtimestamp組み立てて、そこに設定した現在時間を入れて初期値として考えてカウントするというものをちょっと行けそうじゃないかと思い始めたので、ごめんなさい、考え直してみます。
ただ、こうやれば、時間を固定することができるよという人がいれば教えていただきたいです!

該当のソースコード

PHP

1<?php 2try { 3 $db = new PDO('mysql:dbname=c-pro;host=127.0.0.1;charset=utf8', 'root', '' ); 4} catch (PDOException $e) { 5 echo "データベース接続エラー :".$e->getMessage(); 6} 7 8//最初に$nowのクローンと、8日後の変数作る、じょうけんぶんきで1日経過ごと[ ]に結果を配列へ組み込む、8日後になったら表していたデータの中身である配列の中身をけして、クローンのリロードと8日後変数の再設定して循環 9 10date_default_timezone_set('Asia/Tokyo'); 11$now = new DateTime(); 12//作ったが、このままでは初期値が固定されていないため固定される事はない、値を固定して、日時経過を変数として扱いたい。 13$date = $now->format('Y-m-d H:i:s'); 14 15$dateImmu = new DateTimeImmutable($date); 16 17$dtime1 = $dateImmu->modify("+1 day"); 18$dtime1 -> format("Y-m-d H:i:s"); 19 20$dtime2 = $dateImmu->modify("+2 day"); 21$dtime2 -> format("Y-m-d H:i:s"); 22 23$dtime3 = $dateImmu->modify("+3 day"); 24$dtime3 -> format("Y-m-d H:i:s"); 25 26$dtime4 = $dateImmu->modify("+4 day"); 27$dtime4 -> format("Y-m-d H:i:s"); 28 29$dtime5 = $dateImmu->modify("+5 day"); 30$dtime5 -> format("Y-m-d H:i:s"); 31 32$dtime6 = $dateImmu->modify("+6 day"); 33$dtime6 -> format("Y-m-d H:i:s"); 34 35$dtime7 = $dateImmu->modify("+7 day"); 36$dtime7 -> format("Y-m-d H:i:s"); 37 38$dtime8 = $dateImmu->modify("+8 day"); 39$dtime8 -> format("Y-m-d H:i:s"); 40 41 42 43$copy_now = $dateImmu->format('Y-m-d H:i:s');//これも初期値が変動されてしまう 44$time = "+ 1 day"; 45$purpose_time = date("Y-m-d H:i:s", strtotime($time)); 46$update_day = new DateTime($purpose_time); 47$diff = $now->diff($update_day); 48$dtime_1 =& $dtime1;//modifyの扱い方が違うらしい。 49$dtime1 = $dtime_1->format("Y-m-d H:i:s" ); 50//$dateの数値をformat変換してから1日後との比較しようとしている。 51//参照私をする事ができない 52 53 54 55//条件分岐で、今の時間が$dtimeの値よりも飢えの時にtrueにする 56if (($now > $update_day)>$date) { 57 58 echo 'SUCCESS'; 59} else { 60 echo 'FAILURE'; 61} 62 63 64 65 66?> 67 68<?php 69date_default_timezone_set('Asia/Tokyo'); 70$now = new DateTime(); 71$date = $now->format('Y-m-d H:i:s'); 72$time = "+ 1 day"; 73$fix_time = date("Y-m-d H:i:s", strtotime($time)); 74//ここの$fix_timeを固定した値として想定しています。 75if ($date> $fix_time) { 76 echo 'SUCCESS'; 77} else { 78 echo 'FAILURE'; 79} 80?> 81 82

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

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

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

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

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

m.ts10806

2021/08/15 21:40

「固定する」とは?もう少し詳しく書かれたほうが良いです。
m.ts10806

2021/08/15 21:41

あと細かいですが、「成功」を英訳したいのでしたら「success」です。
javahack

2021/08/16 05:52

もっと細かいですが、「success」の対になるのは「false」よりも「failure」かなあ。
guest

回答1

0

自己解決

できました。ありがとうございます。

PHP

1<?php 2try { 3 $db = new PDO('mysql:dbname=c-pro;host=127.0.0.1;charset=utf8', 'root', '' ); 4} catch (PDOException $e) { 5 echo "データベース接続エラー :".$e->getMessage(); 6} 7 8 9//timeはtimestamp型 10$fix_time = $db->query('SELECT time AS ut FROM hogehoge ORDER BY number DESC LIMIT 1 '); 11$fix_timed = $fix_time -> fetch(); 12//ここで今の時間とDBからとった時間を使ってセッティング 13date_default_timezone_set('Asia/Tokyo'); 14$now = new DateTime(); 15$date = $now->format('Y-m-d H:i:s'); 16$format = DateTime::createFromFormat('Y-m-d',$fix_timed['ut'] ); 17$dateImmu = new DateTime($format); 18 19$dtime1 = $dateImmu->modify("+1 day"); 20$dt_1 = $dtime1 -> format("Y-m-d H:i:s"); 21$dt1 = $now->diff($dtime1); 22 23$dtime2 = $dateImmu->modify("+2 day"); 24$dt_2 = $dtime2 -> format("Y-m-d H:i:s"); 25$dt2 = $now->diff($dtime2); 26 27$dtime3 = $dateImmu->modify("+3 day"); 28$dt_3 = $dtime3 -> format("Y-m-d H:i:s"); 29$dt3 = $now->diff($dtime3); 30 31$dtime4 = $dateImmu->modify("+4 day"); 32$dt_4 = $dtime4 -> format("Y-m-d H:i:s"); 33$dt4 = $now->diff($dtime4); 34 35$dtime5 = $dateImmu->modify("+5 day"); 36$dt_5 = $dtime5 -> format("Y-m-d H:i:s"); 37$dt5 = $now->diff($dtime5); 38 39$dtime6 = $dateImmu->modify("+6 day"); 40$dt_6 = $dtime6 -> format("Y-m-d H:i:s"); 41$dt6 = $now->diff($dtime6); 42 43$dtime7 = $dateImmu->modify("+7 day"); 44$dt_7 = $dtime7 -> format("Y-m-d H:i:s"); 45$dt7 = $now->diff($dtime7); 46 47$dtime8 = $dateImmu->modify("+8 day"); 48$dt_7 = $dtime8 -> format("Y-m-d H:i:s"); 49$dt8 = $now->diff($dtime8); 50switch($now){ 51case (($now>$dtime1)&&$now<$dtime2): break; 52case (($now>$dtime2)&&$now<$dtime3):break; 53 case (($now>$dtime3)&&$now<$dtime4):break; 54 case (($now>$dtime4)&&$now<$dtime5):break; 55 case (($now>$dtime5)&&$now<$dtime6):break; 56 case (($now>$dtime6)&&$now<$dtime7):break; 57 case (($now>$dtime7)&&$now<$dtime8):break; 58 case ($now>$dtime8): ここでinsert文に時間をを書くことで上記の$fix_timeでリロードされてそこからオートで動いてくれるというやつです。 59break; 60default; 61} 62?>

投稿2021/08/19 15:12

GPE46232209

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問