長濱ねる2nd写真集(仮)
商品ページ
Amazon
収益広告自動登録)
ファンタジーライフi グルグルの竜と時をぬすむ少女 -Switch
商品ページ
Amazon
収益広告自動登録)
龍の国 ルーンファクトリー - Switch
商品ページ
Amazon
収益広告自動登録)
【任天堂ライセンス商品】SCREEN GUARD for Nintendo Switch 2 (抗菌+高透明+指紋防止タイプ)
商品ページ
Amazon
収益広告自動登録)
スッキリわかるJava入門 第3版 (スッキリわかる入門シリーズ)
商品ページ
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件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
Spigen Switch2 ガラスフィルム 貼り付けキット付き 9H硬度強化ガラス スイッチ2 ドック対応 2枚入 ナノコーティング EZ Fit AGL09111
商品ページ
Amazon
収益広告自動登録)
【任天堂ライセンス商品】貼りやすい 高硬度ブルーライトカットフィルム“ピタ貼り" for Nintendo Switch™ 2【Switch2専用】
商品ページ
Amazon
収益広告自動登録)
ドンキーコング リターンズ HD - Switch
商品ページ
Amazon
収益広告自動登録)
『ToHeart』プレミアムエディション -Steam 【特典】TVアニメ『ToHeart』Blu-ray Disc(全13話・2枚組)同梱
商品ページ
Amazon
収益広告(手動登録)
管理人作品宣伝
ジグソーパズル風パズルゲーム
Webサイト / 最終更新:2025-01-23
ジグソーパズル風パズルゲームです。自分で画像を設定してパズルにできます。…ジグソーパズル風パズルゲームです。自分で画像を設定してパズルにできます。

HPで閲覧する利用素材等の詳細情報
【アークナイツ】アークナイツ-必要素材数集計ツール
Webサイト / 最終更新:2025-02-02
【一部機能返礼特典】『アークナイツ』の育成状況を記録し、育成に必要な素材数を集計するペ…【一部機能返礼特典】『アークナイツ』の育成状況を記録し、育成に必要な素材数を集計するページです。オペレータの実装スケジュールや所持率チェッカーの機能も持ち合わせています。 以下機能は返礼特典としています。 ・アークナイツ-必要素材数集計ページ:DB登録データ出力ページ ・アークナイツ-必要素材数集計ページ:オペレータ一覧ページ(昇進0→2に必要な理性換算値ランキング) ・アークナイツ-必要素材数集計ページ:オペレータ一覧ページ(スキル特化に必要な理性換算値ランキング)

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知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:982.3309 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
ポケットタウン_パズル一覧
最終更新日:2025-05-02
スコア:878.3832 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:243.0556 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
ゲーム『イカれた狩場の看板娘』の紹介・レビュー
最終更新日:2025-05-01
スコア:120.6282 pt
記事概要 イカれたゲームを紹介するぜ! イカれた狩場の看板娘! 以上だ! ちなみにそんなイカれてな…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-05-19
スコア:96.0519 pt
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-05-07
スコア:83.6129 pt
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
アークナイツ-常設商品-理性換算
最終更新日:2024-04-28
スコア:81.2813 pt
概要 "常設商品でお得な商品はどれか"というのを理性に換算して一覧化したものとなります。 絶対的に…
記事を閲覧する
アークナイツ-昇進2率ランキング
最終更新日:2024-04-15
スコア:73.1343 pt
アークナイツのTier表を作る際の備忘録です こちらのページで、昇進2率を基にTier表を作ろうと…
記事を閲覧する
最新記事
JavaScriptでアナログ時計とデジタル時計を表示するコード
最終更新日:2025-05-29
概要 最近アナログ時計を使ったので、アナログ時計を表示するJavaScriptコードを載せます。 …
記事を閲覧する
VRoidナビゲーターが回答できる質問リスト
最終更新日:2025-05-28
VRoidナビゲーターが回答できる質問リスト 「よくある質問」というわけではないですが、「VRoi…
記事を閲覧する
本サイトについて
最終更新日:2025-05-28
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-05-19
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
Clair Obscur: Expedition 33(クレールオブスキュール:エクスペディション33) - PS5
商品ページ
Amazon
収益広告自動登録)