JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで秒数を年・日・時間・分・秒に変換する関数を実装する方法

問題

秒数を表す数値を第1引数(唯一の引数)として受け取り、その秒数に含まれる年・日・時間・分・秒の情報を文字列として構築して返すJavaScript関数を作成します。

なお、この問題では計算をシンプルにするため、1年は365日とみなして扱います。

たとえば、関数に次の入力を与えた場合――

const num = 5454776657;

期待される出力は次のとおりです。

const output = '172 years, 353 days, 23 hours, 44 minutes and 17 seconds';

解決策:サンプルコード

以下が実際のコードです。

const findTime = (num) => {
   if(num < 1){
      return '0'
   };
   const qualifier = num => (num > 1 ? 's' : '')
   const numToStr = (num, unit) => num > 0 ? ` ${num} ${unit}${qualifier(num)}` : ''
   const oneMinute = 60;
   const oneHour = oneMinute * 60;
   const oneDay = oneHour * 24;
   const oneYear = oneDay * 365;
   const times = {
      year: ~~(num / oneYear),
      day: ~~((num % oneYear) / oneDay),
      hour: ~~((num % oneDay) / oneHour),
      minute: ~~((num % oneHour) / oneMinute),
      second: num % oneMinute,
   };
   let str = '';
   for (let [key, value] of Object.entries(times)) {
      str += numToStr(times[key], key)
   }
   const arr = str.trim().split(' ')
   const res = []
   arr.forEach((x, i) => {
      if (i % 2 === 0 && i !== 0) res.push(i === arr.length - 2 ? 'and' : ',')
      res.push(x)
   })
   return res.join(' ').replace(/\s,/g, ',')
}
console.log(findTime(5454776657));

コードの仕組み

ここからは、この関数のロジックを段階的に解説します。

1. 各単位の秒数を定義

まず、1分・1時間・1日・1年がそれぞれ何秒に相当するかを定数として定義します。これにより後続の計算が格段に読みやすくなります。

2. 単位ごとの値を算出

除算と剰余演算子(%)を組み合わせることで、年・日・時間・分・秒それぞれの値を求めています。また、~~(チルダ2つ)は小数点以下を切り捨てるビット演算で、Math.floor()の代わりとして使える簡潔な記法です。

3. 文字列の組み立て

Object.entries()で各単位とその値を取り出し、値が0より大きい場合のみ文字列へ連結しています。この工夫により、「0日」のような不要な項目が自動的に省略されます。さらにqualifier関数により、値が1より大きいときだけ複数形の「s」が付与されます。

4. 自然な文章への整形

最後に、項目同士をカンマで区切り、最後の2項目の間には「and」を挿入することで、英語として自然で読みやすい文字列に整形しています。

出力結果

コンソールには次のように表示されます。

172 years, 353 days, 23 hours, 44 minutes and 17 seconds
  1. 時間を分と秒に変換するC++プログラムの解説

    本記事では、時間(hour)を入力として受け取り、それを分と秒に変換して結果を出力するC++プログラムを紹介します。変換に使用する計算式時間を分と秒に変換する際には、以下の式を使用します。1時間 = 60分 分 = 時間 × 60 1時間 = 3600秒 秒 = 時間 × 3600入出力例入力:hours = 3 出力:3時間は180分です 3時間は10800秒です 入力:hours = 5 出力:5時間は300分です 5時間は18000秒ですプログラムのアプローチ時間の値を整数型の変数 n に入力として受け取る上記の変換式を適用し、時間を分と秒に変換す

  2. 【Python入門】秒を「時:分:秒」形式に変換する3つの方法

    はじめに この記事では、「与えられた秒数を時・分・秒の形式に変換する」という問題に対する解決策を、3つの異なるアプローチとともに分かりやすく解説します。プログラムで経過時間やタイマーを扱う際によく使われる処理なので、ぜひ参考にしてください。 アプローチ1: 算術演算による力任せの方法(ブルートフォース) 剰余演算子(%)と整数除算演算子(//)を組み合わせることで、24時間以内の秒数から時・分・秒をそれぞれ求めることができます。ロジックがシンプルで、標準モジュールに依存しないのが特徴です。 コード例 def convert(seconds): seconds = seconds %