沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「PHP」指定された日付の週の最初の日(月曜日)を取得する

Z-BlogPHP アプリケーションでは、「タイムスタンプが含まれる週の最初の日を取得する」機能が使用されていますが、最初の実装は「- -」に対して正しくありませんでした。

碎雨集 - Z-Blog アプリセンター:

https://app.zblogcn.com/?id=21047

最初は00:00:00のタイムスタンプを直接取得しようとしましたが、やはり手間がかかりエラーが発生しやすいです。

function mz_ShikonNoTama_GetCurMonday($time)
{
  // 間違った実装
  // $w = date("N", $time);
  // return $time - ($time % 86400) - 86400 * ($w - 1) - 3600 * 8;

  // 正しい実装
  $week = date("N", $time);
  return $time - ($week - 1) * 86400;

  // 00:00を取得する場合は、次のようにすることもできます
  // $week = date("N", $time);
  // return $time - ($week - 1) * 86400 - (($time + 28800) % 86400);
}
$arr = [1642896000, 1642953599, 1642953600, 1642957612];
$rltHTML = '';
for ($i = 0; $i < count($arr); $i++) {
  $time = $arr[$i];
  $date = date("Y-m-d H:i", $time);
  $week = date("N", $time);
  $monday = $time - ($week - 1) * 86400;
  // $monday = $time - ($week - 1) * 86400 - (($time + 28800) % 86400);
  $rltHTML .= strtr($tpl, [
    '{key}' => 'time',
    '{value}' => $date,
  ]);
  $rltHTML .= strtr($tpl, [
    '{key}' => 'week',
    '{value}' => $week,
  ]);
  $rltHTML .= strtr($tpl, [
    '{key}' => 'monday',
    '{value}' => date("Y-m-d H:i", $monday),
  ]);
  $rltHTML .= "<br>";
}

echo $rltHTML;

// N	               丨 ISO-8601形式の数字で表される週の何日目かを示す丨 1(月曜日)から7(日曜日)まで
// w	               丨 週の何日目かを示す数字丨 0(日曜日)から6(土曜日)まで
// D	               丨 週の何日目かを示す3文字のテキスト丨 MonからSunまで
// l(小文字のL)     丨 曜日を完全なテキスト形式で示す丨 SundayからSaturdayまで
time:2022-01-23 08:00

week:7

monday:2022-01-17 08:00


time:2022-01-23 23:59

week:7

monday:2022-01-17 23:59


time:2022-01-24 00:00

week:1

monday:2022-01-24 00:00


time:2022-01-24 01:06

week:1

monday:2022-01-24 01:06
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。