商品サンプル画像
映画しまじろう しまじろうと ゆうきのうた
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
鬼太郎誕生 ゲゲゲの謎 真生版
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
鬼太郎誕生 ゲゲゲの謎 真生版
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
LUPIN THE IIIRD 銭形と2人のルパン
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
記事の概要
JavaScriptでアナログ時計とデジタル時計を表示するコード
作成日:2025-05-29
最終更新日:2025-05-29
記事の文字数:4645
情報技術
本記事のトピック
  • 概要
  • アナログ時計のコード
  • デジタル時計のコード
JavaScriptでアナログ時計とデジタル時計を表示するコード
概要

最近アナログ時計を使ったので、アナログ時計を表示するJavaScriptコードを載せます。
ついでにデジタル時計(と言ってもデジタル表記=7セグメントではない)を表示するJavaScriptコードも載せます。

細かいコード解説はしませんが、中身を見れば概ね分かると思います。

以下のような時計ができます。

アナログ時計のコード

sample.html

<head> <link rel="stylesheet" href="./main.css"> </head> <body> <div id="analogClockContainer"></div> <script src="./main.js"></script> </body>

main.js

// 時計を表示する領域 const clockContainer = document.getElementById('analogClockContainer'); // 日付 & 午前/午後を表示する要素を作成 const clockDate = document.createElement('div'); clockDate.id = 'analogClockDate'; clockContainer.appendChild(clockDate); // アナログ時計要素を作成 const clock = document.createElement('div'); clock.id = 'analogClock'; clockContainer.appendChild(clock); // 文字盤を表示 for(let i = 1; i <= 12; i++){ const num = document.createElement('div'); num.classList.add('analog-clock-face'); num.innerText = i; // 時計の中心からの角度 const angle = (i - 3) * 30; const radius = 90; // 半径 const x = radius * Math.cos(angle * Math.PI / 180); const y = radius * Math.sin(angle * Math.PI / 180); num.style.left = `calc(50% + ${x}px)`; num.style.top = `calc(50% + ${y}px)`; clock.appendChild(num); } // 短針作成 const clockHour = document.createElement('div'); clockHour.classList.add('analog-clock-hand'); clockHour.classList.add('analog-clock-hour'); clock.appendChild(clockHour); // 長針作成 const clockMinute = document.createElement('div'); clockMinute.classList.add('analog-clock-hand'); clockMinute.classList.add('analog-clock-minute'); clock.appendChild(clockMinute); // 秒針作成 const clockSecond = document.createElement('div'); clockSecond.classList.add('analog-clock-hand'); clockSecond.classList.add('analog-clock-second'); clock.appendChild(clockSecond); // update処理の定義 let lastHours; const WEEKDAY_MASTER = ["日", "月", "火", "水", "木", "金", "土"]; const update = () => { if(!document.hidden){ // 現在時刻の取得 const now = new Date(); // アナログ時計を更新 const seconds = now.getSeconds(); const minutes = now.getMinutes(); const hours = now.getHours(); const secondDeg = seconds * 6; const minuteDeg = minutes * 6 + seconds * 0.1; const hourDeg = ((hours % 12) + minutes / 60) * 30; clockHour.style.transform = `translateX(-50%) rotate(${hourDeg}deg)`; clockMinute.style.transform = `translateX(-50%) rotate(${minuteDeg}deg)`; clockSecond.style.transform = `translateX(-50%) rotate(${secondDeg}deg)`; // 日付 & 午前/午後表記を更新 if(lastHours !== hours){ const weekday = WEEKDAY_MASTER[now.getDay()]; const month = now.getMonth() + 1; const date = now.getDate(); clockDate.textContent = `${month}/${date}(${weekday}) ${hours < 12 ? "午前" : "午後"}`; lastHours = hours; } } // 1000ミリ秒後にupdate処理を呼び出す(パフォーマンス的にsetIntervalは使わない) setTimeout(update, 1000); } // update処理開始 update();

main.css

@charset "utf-8"; #analogClockContainer { width: 400px; padding-top: 50px; padding-bottom: 50px; border-radius: 1.0em; } #analogClockDate { text-align: center; color: black; font-size: 1.5em; margin-bottom: 0.5em; } #analogClock { position: relative; width: 200px; height: 200px; border: 8px solid #333; border-radius: 50%; margin: 0 auto; background: white; } .analog-clock-face { position: absolute; transform: translate(-50%, -50%); font-size: 12px; color: #000; font-weight: bold; } .analog-clock-hand { position: absolute; bottom: 50%; left: 50%; transform-origin: bottom center; transform: translateX(-50%) rotate(0deg); } .analog-clock-hour { width: 6px; height: 50px; background: #000; z-index: 3; } .analog-clock-minute { width: 4px; height: 70px; background: #666; z-index: 2; } .analog-clock-second { width: 2px; height: 90px; background: red; z-index: 1; }
デジタル時計のコード

sample.html

<head> <link rel="stylesheet" href="./main.css"> </head> <body> <div id="analogClockContainer"></div> <script src="./main.js"></script> </body>

main.js

// 時計を表示する領域 const clockContainer = document.getElementById('degitalClockContainer'); // デジタル時計要素を作成 const clock = document.createElement('div'); clock.id = 'degitalClock'; clockContainer.appendChild(clock); // 時間要素を作成 const clockTime = document.createElement('div'); clockTime.classList.add('degital-clock-time'); clock.appendChild(clockTime); // 日付要素を作成 const clockDate = document.createElement('div'); clockDate.classList.add('degital-clock-date'); clock.appendChild(clockDate); // update処理の定義 let lastHours; const WEEKDAY_MASTER = ["日", "月", "火", "水", "木", "金", "土"]; const update = () => { if(!document.hidden){ // 現在時刻の取得 const now = new Date(); // 時間を更新 const secondsPad = String(now.getSeconds()).padStart(2, '0'); const minutesPad = String(now.getMinutes()).padStart(2, '0'); const hoursPad = String(now.getHours()).padStart(2, '0'); clockTime.textContent = `${hoursPad}:${minutesPad}:${secondsPad}`; // 日付を更新 const hours = now.getHours(); if(lastHours !== hours){ const weekday = WEEKDAY_MASTER[now.getDay()]; const month = now.getMonth() + 1; const date = now.getDate(); clockDate.textContent = `${month}/${date}(${weekday}) ${hours < 12 ? "AM" : "PM"}`; lastHours = hours; } } // 1000ミリ秒後にupdate処理を呼び出す(パフォーマンス的にsetIntervalは使わない) setTimeout(update, 1000); }; // update処理開始 update();

main.css

@charset "utf-8"; #degitalClockContainer { width: 400px; padding-top: 50px; padding-bottom: 50px; border-radius: 1.0em; } #degitalClock { position: relative; width: 350px; height: 175px; background: linear-gradient(135deg, #e7e7e7, #c0c0c0, #808080); border-top: 3px solid #f5f5f5; border-left: 3px solid #f5f5f5; border-bottom: 3px solid #5e5e5e; border-right: 3px solid #5e5e5e; padding-top: 30px; } .degital-clock-time, .degital-clock-date{ width: 80%; margin-left: auto; margin-right: auto; background-color: #e0ffe0; border-top: 2px solid black; border-left: 2px solid black; } .degital-clock-time{ margin-bottom: 10px; text-align: center; font-size: 55px; } .degital-clock-date{ text-align: center; font-size: 30px; }
コメントログ
※コメントは最新50件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
商品サンプル画像
『怪獣8号』第1期総集編
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
戦隊大失格
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
『ヤマトよ永遠に REBEL3199』 第三章 群青のアステロイド(レンタル版)
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
キズナ ~日々輝と世々良~
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
管理人作品宣伝
剣と魔法と学園モノ。3 - パーティ編成確認ツール
Webサイト / 最終更新:2025-03-10
『ととモノ。3』のパーティ編成を考える際に使えるツールです。…『ととモノ。3』のパーティ編成を考える際に使えるツールです。

HPで閲覧する利用素材等の詳細情報
【MMDアークナイツ】from Y to Y with ソラ
動画 / 最終更新:2022-10-02
「from Y to Y」を歌って踊るソラです。…「from Y to Y」を歌って踊るソラです。

YouTubeで閲覧するニコニコ動画で閲覧する利用素材等の詳細情報
作品一覧はこちら
関連ページ
JavaScriptでアナログ時計とデジタル時計を表示するコード
最終更新日:2025-05-29
概要 最近アナログ時計を使ったので、アナログ時計を表示するJavaScriptコードを載せます。 …
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-03
最終更新日:2025-04-20
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-02
最終更新日:2025-04-15
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
最終更新日:2025-04-13
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
GIF / APNG(アニメーション付きPNG)ファイル解析ページ
最終更新日:2025-03-31
ファイル読込・操作 以下に調べたいファイルを読み込ませてください。 ファイル情報 カラーパレットを…
記事を閲覧する
gifler.js仕様メモ
最終更新日:2025-03-23
本ページの趣旨 「gifler.js」という、gifアニメーションをcanvasに簡単に表示できる…
記事を閲覧する
【プログラミング】実例で分かるかもしれない再帰処理
最終更新日:2024-12-15
本ページは以下動画の台本を書き起こしたものです 解説の趣旨・方向性 皆さん、こんばんは今回はプログ…
記事を閲覧する
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-公開
最終更新日:2024-12-06
概要 SNSツイートを一元化するためのツールを作成しています(古い記事ですが、こちらのページで紹介…
記事を閲覧する
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
最終更新日:2024-10-13
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
記事を閲覧する
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
最終更新日:2024-10-08
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
記事を閲覧する
本サイトのタグ一覧
NovelAIR18VRoidWebサイト作成Webツールととモノ。アークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグネットスラング系プログラミングホラーポケットタウン怪談気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
ポケットタウン_パズル一覧
最終更新日:2025-05-02
スコア:814.1538 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:503.2145 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
スコア:209.2513 pt
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
ゲーム『イカれた狩場の看板娘』の紹介・レビュー
最終更新日:2025-05-01
スコア:174.5734 pt
記事概要 イカれたゲームを紹介するぜ! イカれた狩場の看板娘! 以上だ! ちなみにそんなイカれてな…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:172.7640 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
黒バス:キセキの世代級の人たちの技一覧
最終更新日:2024-07-21
スコア:114.8438 pt
黒バスのキセキの世代級の人たちの技一覧です 概要 黒バスのキセキの世代級の人たちの技を記載したもの…
記事を閲覧する
アークナイツ-常設商品-理性換算
最終更新日:2024-04-28
スコア:104.8065 pt
概要 "常設商品でお得な商品はどれか"というのを理性に換算して一覧化したものとなります。 絶対的に…
記事を閲覧する
本サイトについて
最終更新日:2025-07-10
スコア:96.0106 pt
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
最新記事
地獄先生ぬ~べ~新アニメで設定変わったところ(3話まで)
最終更新日:2025-07-13
概要 地獄先生ぬ~べ~の新アニメが2025-07-02(木)よりやっていますが、そこで設定が変わっ…
記事を閲覧する
本サイトについて
最終更新日:2025-07-10
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
htmlタグ混在のテキストをhtmlタグとプレーンテキストで分けるJavaScriptコード
最終更新日:2025-06-20
概要 「よくある質問は a href="/" こ span ち /span ら /a です」 とい…
記事を閲覧する
商品サンプル画像
同じ月を見て
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認