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

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

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

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

Q&A

解決済

4回答

1456閲覧

○日前、○時間の計算方式

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/03/25 06:22

編集2020/03/25 06:22

前提・実現したいこと

よくSNSで見る○日前や○時間前などの計算方式が知りたいのですがどうやってるのでしょうか?
例えば最終ログインが2020.02.21 18:19だとします。
今が2020.03.25 15:19だとして、
どのような計算して○日前○時間前と出すのが正しいのかわかりません
単純に日付を数字と扱いマイナスにした場合でも計算が狂うと思いますし、以ての外ですよね?
詳しい方教えていただけませんでしょうか?

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

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

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

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

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

m.ts10806

2020/03/25 06:23

タグの通りPHPで調べると幾らでも出てきませんか?
退会済みユーザー

退会済みユーザー

2020/03/25 06:28

「php 日付 何日前」大量に参考情報が見つかりますけども。
退会済みユーザー

退会済みユーザー

2020/03/25 06:32

今の日付から何時間前後を+-した計算、何日前後を+-した計算というのは理解できましたが、 2020.03.25 15:19-2020.02.21 18:19という式が理解することができなかった為、質問させていただきました
退会済みユーザー

退会済みユーザー

2020/03/25 06:32

単純に、 <?php //○秒後 echo date("Y-m-d H:i:s",strtotime("+1 second")); //○分後 echo date("Y-m-d H:i:s",strtotime("+1 minute")); //○時間後 echo date("Y-m-d H:i:s",strtotime("+1 hour")); //○日後 echo date("Y-m-d H:i:s",strtotime("+1 day")); //○週間後 echo date("Y-m-d H:i:s",strtotime("+1 week")); //○ヶ月後 echo date("Y-m-d H:i:s",strtotime("+1 month")); //○年後 echo date("Y-m-d H:i:s",strtotime("+1 year")); ?> では計算できませんよね?
m.ts10806

2020/03/25 06:37

まあ[.]で区切ってあってそのまま使おうとしたら無理ですよね。
退会済みユーザー

退会済みユーザー

2020/03/25 06:41

区切ってなかったとしても、無理ではないですか。
m.ts10806

2020/03/25 06:43

無理と言いきるなら諦めては。 回答しましたけど、私は「日付として正しくない形式だから」無理と書いています。
退会済みユーザー

退会済みユーザー

2020/03/25 06:53

勉強不足でした。気分を害されたようで申し訳ございませんでした。
m.ts10806

2020/03/25 06:57

気分を害したというか、まず「無理という前提」でくることが理解できないだけです。 「こんなこと誰も絶対にやってない」自信があるのかな?と。 調べ方が悪いのか調べる気がないのかすら、この質問内容ではわかりませんから。 コード動かせる環境があるならエラー出ようと想定通りの結果にならなかろうと試行錯誤してみるべきですよね。プログラミングしようとしてるなら。
m.ts10806

2020/03/25 07:21 編集

この質問内容だけ読んで「私なりに調べたこと」が伝わるのならその理屈も通ると思います。 書いてないことは他人には伝わらない。本当に調べず試さず丸投げする人との区別は不可能。それだけです。 調べ方、参照した記事など 書いてあれば調べ方のアドバイスができます。有識者なら記事が解決に繋がるものかどうか判断できます。 書籍であればその良し悪しも知っています(現に「使うべきではない」と書籍に突っ込みが入ることもある)。 「質問するときのヒント」にも書いてありますが、調べ方を知っていることも技術のうちです。 それなら「○○というキーワードで調べて○○という記事を読んだ。そしてこういうコードを試してみたが解決できなかった」と書いてもらった方がアドバイスもしやすい。 「なにかいいキーワードはないですか?」と聞くのもありだと思う。自分が実力不足と思うのなら余計に。 で、あなたは何と書いてますか?
guest

回答4

0

いくつかサンプルコードを。

php

1<?php 2 3$last_login = new DateTime('2020-02-21 18:19'); 4$today = new DateTime('2020-03-25 15:19'); 5echo $today->diff($last_login)->format('%d days');

3 days

php

1<?php 2 3$last_login = new DateTime('2020-03-24 18:19'); 4$today = new DateTime('2020-03-25 15:19'); 5if ($today->diff($last_login)->d < 1) { 6 echo $today->diff($last_login)->format('%h hours'); 7} 8else { 9 echo $today->diff($last_login)->format('%d days'); 10}

21 hours

投稿2020/03/25 06:47

編集2020/03/25 06:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/03/25 06:50

どういう条件で何時間前、何日前とするか、という要件を定義して、 それに沿ったコードを書けばいいだけだと思うの、私だけ?
m.ts10806

2020/03/25 06:52

いえ、回答者の多くが感じてると思います。
退会済みユーザー

退会済みユーザー

2020/03/25 06:55

サンプルコード提示していただきありがとうございます このサンプルをもとに勉強させてください ありがとうございます
退会済みユーザー

退会済みユーザー

2020/03/25 06:59

やっつけで3つサンプル書いたけど、お気に召しますやら
guest

0

ベストアンサー

本当にそのままするなら、
time() - strtotime(対象の日)
とかして、差分を1日の秒数で割って
余りを
みたいな感じ。

ただ「対象の日」が「日付として正しく認識できるフォーマット」じゃないと1970年1月1日になるので、提示されたように.区切りだったり日本語(年月日)だとダメ。
datetime型として認識できるかたちにしないと。

あとは、「PHP 日付 差分計算」で調べてやってみてください。

投稿2020/03/25 06:42

編集2020/03/25 06:51
m.ts10806

総合スコア80875

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

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

0

差をとって、

  • 606024で割って切り捨てたのが日付
  • 606024で割った余りを60*60で割って切り捨てたのが時
  • 60*60で割った余りを60で割って切り捨てたのが分

投稿2020/03/25 06:42

yambejp

総合スコア116724

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

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

yambejp

2020/03/25 06:42

$lastlogin=strtotime("2020-02-21 18:19"); $now=strtotime("2020-03-25 15:19"); $diff=$now-$lastlogin; $d=(int) ($diff/(60*60*24)); $h=(int) ($diff%(60*60*24)/(60*60)); $m=(int) ($diff%(60*60)/60); print $d."d<br>"; print $h."h<br>"; print $m."m<br>";
退会済みユーザー

退会済みユーザー

2020/03/25 06:54

サンプルコード提示していただきありがとうございます このサンプルをもとに勉強させてください ありがとうございます
guest

0

例えば最終ログインが2020.02.21 18:19だとします。

今が2020.03.25 15:19だとして、
どのような計算して○日前○時間前と出すのが正しいのかわかりません

正解はありません。
要件次第なので、どう出したいかを決めるだけです。

各サイトもバラバラじゃないですかね?

  • 差が24時間未満の場合は「n時間前」、24時間以上の場合は時間差/24での「n日前」
  • 差が24時間未満の場合は「n時間前」、24時間以上の場合は単純に日の差での「n日前」
  • 比較対象の日が同じなら時間の差での「n時間前」、日が異なるなら日の差での「n日前」

時間表示についても 1分単位や5分単位、10分単位、30分単位、1時間単位など。

投稿2020/03/25 06:36

Y.H.

総合スコア7918

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

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

退会済みユーザー

退会済みユーザー

2020/03/25 06:43

単純に今日より前であれば何日前、24時間以内であれば○時間前でいいのですが、わかりません もっと自分で調べてから質問しなさいと怒られてるようなのですが、自分的には難しく感じたので質問しました
Y.H.

2020/03/25 07:48

> 単純に今日より前であれば何日前、24時間以内であれば○時間前でいいのですが 単純じゃないんですよね。この要件が曖昧であることが解りますか? 今、2020/3/25 16:42;10 として比較した結果 20時間前 だった場合は 単純に今日より前なので「1日前」? 24時間以内だから「20時間前」? どちらを表示するのでしょうか?
Y.H.

2020/03/26 10:45

質問ごと削除されてたのが復活した!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問