1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPで投稿日時から現在までの経過時間を表示するための関数の書き方

Last updated at Posted at 2023-02-15

投稿日時を表示する方法

Twitterみたいに投稿から経過した時間を表示すための関数をPHPで書いていきます。

表示例

  • 現在時刻が「2023-01-01 00:00:00」だった場合
    • 2022-12-31 23:59:50 ->10秒前
    • 2022-12-31 23:59:00 ->1分前
    • 2022-12-31 23:00:00 ->1時間前
    • 2022-12-30 00:00:00 ->1日前
    • 2022-11-30 00:00:00 ->2022年11月30日

手順

convertToDayTimeAgoという関数を作成し、引数の$datetimeに「2023-01-01 00:00:00」のような日時と時間を指定した文字列が挿入される想定です。

php
/**
 * 指定した日時からどれくらい経過したかを取得
 * @param string $datetime 日時
 * @return string
 */
function convertToDayTimeAgo(string $datetime)
{
  // ※UNIX時間とは、UTC時刻における1970年1月1日午前0時0分0秒(UNIXエポック)からの経過秒数を計算したものです。
  // $datetimeには'2023-02-13 21:55:00'のような指定した日時の文字列が入ってくる想定です
  $unix = strtotime($datetime);
  // time関数はUNIX時刻から現在までの秒数を返します
  $now = time();
  // 現在の時刻から指定した日時のユニックスタイムを引きます。これによって現在からどれくらい時間が経っているかを取得することができます。
  $diff_sec = $now - $unix;

  if ($diff_sec < 60) {
    $time = $diff_sec;
    $unit = '秒前';
  } elseif ($diff_sec < 3600) {
    $time = $diff_sec / 60;
    $unit = '分前';
  } elseif ($diff_sec < 86400) {
    $time = $diff_sec / 3600;
    $unit = '時間前';
  } elseif ($diff_sec < 2764800) {
    $time = $diff_sec / 86400;
    $unit = '日前';
  } else {
    if (date('Y') !== date('Y', $unix)) {
      $time = date('Y年n月j日', $unix);
    } else {
      $time = date('n月j日', $unix);
    }
    return $time;
  }
  return (int)$time . $unit;
}

strtotime($datetime)ではUNIXタイムスタンプに置き変えています。
UNIXタイムとは1970 年 1 月 1 日 00:00:00 UTC からの経過秒数を表しているのですが、詳しくは下記のPHP公式マニュアルを確認してください。

time()ではUNIX時刻から現在までの秒数を返します。

time()からstrtotime($datetime)を引くことによって(ここでは引いた数を仮に$diff_secとする)、現在からどれくらい経過したかを秒数で表すことができます。

以降の処理については、経過した秒数から表示する方法をif文で構成しています。
・経過した時間 < 60だった場合、〇秒前で表示
・経過した時間 < 3600(60×60)だった場合、$diff_sec÷60→〇分前で表示

「時間前」も「日前」もこの繰り返しです。

elseでは、1ヶ月以上前の投稿、1年以上前の投稿の記述について記載しています。

最終のreturnではint型で小数点を切り捨てて、$unitに入ってきた文字列とともに表示します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?