商品サンプル画像
まどろみバーメイド 18巻 (芳文社コミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
しょせん他人事ですから ~とある弁護士の本音の仕事~ 10 (黒蜜コミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
じゃあ、あんたが作ってみろよ (4) 【かきおろし漫画付】 (comicタント)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
誰かこの状況を説明してください! ~契約から始まるウェディング~ 11(アリアンローズコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
冒険王ビィト 19 (ジャンプコミックスDIGITAL)
商品ページ
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) (サンデーうぇぶりコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
盤上のオリオン(8) (週刊少年マガジンコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
D.C.Ⅱ.S.S.~ダ・カーポⅡセカンドシーズン~(TV番組)
商品ページ
Amazon
非収益広告(手動登録)
サクラ度:○(問題なし)
商品サンプル画像
葬送のフリーレン 15 特別短編小説付き特装版 (少年サンデーコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
管理人作品宣伝
【アークナイツ】アークナイツ-必要素材数集計ツール
Webサイト / 最終更新:2025-02-02
【一部機能返礼特典】『アークナイツ』の育成状況を記録し、育成に必要な素材数を集計するペ…【一部機能返礼特典】『アークナイツ』の育成状況を記録し、育成に必要な素材数を集計するページです。オペレータの実装スケジュールや所持率チェッカーの機能も持ち合わせています。 以下機能は返礼特典としています。 ・アークナイツ-必要素材数集計ページ:DB登録データ出力ページ ・アークナイツ-必要素材数集計ページ:オペレータ一覧ページ(昇進0→2に必要な理性換算値ランキング) ・アークナイツ-必要素材数集計ページ:オペレータ一覧ページ(スキル特化に必要な理性換算値ランキング)

HPで閲覧する利用素材等の詳細情報返礼特典
不思議の幻想郷 TODR:装備の印の組合せシミュレーションツール
Webサイト / 最終更新:2025-11-30
『不思議の幻想郷 TOD RELOADED.』の印考慮用のツールです。 使いたい印の…『不思議の幻想郷 TOD RELOADED.』の印考慮用のツールです。 使いたい印の固有印/追加印ごとの最高性能と入手方法(Wiki調べ)を見ることができます。 また、使いたい印にチェックを入れたあと、画面最下部の集計ボタンを押すことでそれらを一覧で見ることもできます。

HPで閲覧する利用素材等の詳細情報
作品一覧はこちら
関連ページ
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
スコア:686.9423 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
ととモノ。3:各学科の強みを一覧化
最終更新日:2025-10-12
スコア:657.1429 pt
このページのポイントどの学科が良いかすぐに分かる各学科のどのような点が良いか分かる各役割で欲しいスキ…
記事を閲覧する
剣と魔法と学園モノ。3 前作からの変更点
最終更新日:2025-10-12
スコア:492.6209 pt
概要 もうそろそろ「ととモノ。3」のリマスターが出るので、自分自身のための振り返りと言う意味も込め…
記事を閲覧する
アークナイツ:生息演算「熱砂秘聞」の攻略メモ
最終更新日:2025-01-13
スコア:438.9888 pt
注意 本ページには攻略情報も一部含まれてるので、そういうのを見たくない人は見ない方が良いです。含ま…
記事を閲覧する
ヒカルの碁で、なぜ佐為は消えたのか
最終更新日:2025-04-21
スコア:408.1244 pt
概要 ヒカルの碁で佐為が消えた理由について、「ヒカルの才能を目覚めさせるという役割を終えたから」と…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-09-23
スコア:399.3772 pt
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:374.6947 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:259.6047 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
最新記事
OpenAI API:Webサーチモードで参考にしてほしいURLを送っても無視されることがある問題について
最終更新日:2025-12-07
このページのポイントWebサーチでも、まずは「プロンプトだけ」を読んで「解釈」される「前提として見て…
記事を閲覧する
不思議の幻想郷 TODR:装備の印の組合せシミュレーションツール
最終更新日:2025-11-30
概要本ページは『不思議の幻想郷 TOD RELOADED.』の印考慮用のツールページです。基本事項固…
記事を閲覧する
逆転裁判3:あやめさんのナルホド君への呼び方にある3つの伏線
最終更新日:2025-11-26
このページのポイント呼び方ひとつに3つも伏線あるなんてスゲーネタバレ注意本ページには「逆転裁判3」の…
記事を閲覧する
VRoidナビゲーター:質問機能を強化しました
最終更新日:2025-11-25
このページのポイントVナビの質問機能がいま開いているページを参照するようになった必要な情報をネット上…
記事を閲覧する
商品サンプル画像
魔都精兵のスレイブ 20 (ジャンプコミックスDIGITAL)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)