《コピペで変換!》経過時間を日時分秒形式に変換する方法

AfterEffectsのエクスプレッションでは、秒、フレーム、タイムコードなどの変換は簡単にできます。しかし、秒から日時分秒に変換したり、日時分秒を秒に変換する方法がないため、簡単にできる方法を準備しましたのでご紹介します。

時間変換エクスプレッション

まずは標準機能での時間変換についてご紹介します。

秒をフレーム、タイムコード、フィートなどに変換できる「Time Conversion」カテゴリのエクスプレッションについて、以下の動画をご覧ください。

冒頭に書いた通り、この中には秒を日時分秒形式に変換するエクスプレッションはないため、具体的な対応方法をこれから説明していきたいと思います。

経過時間(秒)と日時分秒形式を相互変換

変換イメージ

秒から日時分秒形式、日時分秒形式から秒を変換するために、2種類の関数を作ってみました。

※ 関数については以下の記事をご覧ください。
関連記事

AfterEffectsのエクスプレッション内で、時間計算など、同じ処理を何度もする場合もあると思います。 そんな時は、関数を使うと記述量を大幅に減らせる可能性があります。 この関数の使い方についてご紹介します。 関数と[…]

自作関数を使って処理を再利用する方法

秒を日時分秒形式に変換

//© 2020 COLORCODE-AE
//関数を作る
function secondToTimeFormat(nSec){
  var nDay = Math.floor(nSec/(60*60*24));
  var nHour = Math.floor((nSec%(60*60*24))/(60*60)); 
  var nMinute = Math.floor((nSec%(60*60))/60);
  var nSecond = Math.floor(nSec%60);
  return [nDay, nHour, nMinute, nSecond];
}
//関数を使う
var anDhms = secondToTimeFormat(100000);
anDhms[0];  /* 結果:1(日) */
anDhms[1];  /* 結果:3(時間) */
anDhms[2];  /* 結果:46(分) */
anDhms[3];  /* 結果:40(秒) */

上記の例の場合、100000秒を、1日、3時間、46分、40秒に変換します。結果は数値として配列に格納してあるので、必要な部分だけを取り出して使用可能です。

秒ではなく、分を日時分秒形式に変換したい場合は、分を60倍にして引数に指定すれば簡単に実現できます。

また、引数にtimeを入れれば、コンポジションの経過時間を日時分秒形式に変換できます。

※ 上記の書き方をした場合は、最後のdhms[3]の結果40のみが反映されます。
※ Math.floorは小数点以下を切り捨てです。詳しくはこちらをご覧ください。
※ 剰余演算子%は割った余りを取得します。詳しくはこちらをご覧ください。

日時分秒形式を秒に変換

//© 2020 COLORCODE-AE
//関数を作る
function timeFormatToSecond(nDay, nHour, nMinute, nSecond){
  var nSec = nDay * 60 * 60 * 24;
  nSec += nHour * 60*60; 
  nSec += nMinute * 60;
  nSec += nSecond;
  return nSec;
}
//関数を使う
timeFormatToSecond(1, 3 ,46, 40);  /* 結果:100000(秒) */

上記の例の場合、1日、3時間、46分、40秒を、100000秒に変換します。また、秒ではなく分で取得したい場合は結果を60で割ることで簡単に実現できます。

※ 加算代入+=について詳しくはこちらをご確認ください

応用編

10秒で10日経過させ、その結果を「0日0時間0分0秒」という形式の文字列でテキストレイヤーに表示させる場合の方法です。

テキストレイヤーのソーステキストに以下のエクスプレッションを記載します。

//© 2020 COLORCODE-AE
//関数を作る
function secondToTimeFormat(nSec){
  var nDay = Math.floor(nSec/(60*60*24));
  var nHour = Math.floor((nSec%(60*60*24))/(60*60)); 
  var nMinute = Math.floor((nSec%(60*60))/60);
  var nSecond = Math.floor(nSec%60);
  return [nDay, nHour, nMinute, nSecond];
}
//関数を使う
var anDhms = secondToTimeFormat(time*60*60*24);
anDhms[0].toString()+"日"+
anDhms[1].toString()+"時間"+
anDhms[2].toString()+"分"+
anDhms[3].toString()+"秒";

timeは、コンポジション開始からの秒数が入っています。この「秒」を60倍で「分」、更に60倍で「時間」、更に24倍で「日」に変換しています。これで10秒経過すると10日経過したことになります。

この結果が数値で返ってくるので、toString()で文字列に変換し、文字列を連結して出力しています。

※ toString()を記述しなくても数値から文字列に暗黙的に変換してくれますが、今回は明示するためにつけています。

まとめ

時間変換はちょっと面倒ですが、今回作成した関数を使うことで簡単に変換できます。

コピペで動くはずですので、値を変えて動かしてみると使い方が理解できると思います。

タイムラプス動画などで時間を細かく表示する場合など、活躍の場は色々あると思いますのでお試しください。

経過時間を日時分秒形式に変換する方法
最新情報をチェックしよう!
>Aeをもっと便利に。「COLOR CODE - AE」

Aeをもっと便利に。「COLOR CODE - AE」

AfterEffectsをもっと便利に使う為のコンテンツを制作・発信しているブログです。YouTube「COLOR CODE - AE チャンネル」では、エフェクト、エクスプレッション、プリセット、プラグインのリファレンス動画を公開しています。チャンネル登録もお待ちしています!

CTR IMG