前提・実現したいこと
JavaScriptで、データベースにある「2020-10-30 12:00:00.000000」の形式の日付を「X分前」と変換したいです。
ただし、ブラウザ言語に沿った変換を求めています。
発生している問題・エラーメッセージ
エラーメッセージは特に出ていませんが、ブラウザ言語に沿った変換ができません。
おそらくですが問題は下記ソースコード21行目の「// ←ここがおかしい?」とある部分だと思います(違うかもしれません)。
該当のソースコード
データベースにあるのが「created_at」で、それを関数ago()で変換しようという意図です。
JavaScript
1// データベースにある値(INSERTしたときの標準時)であるcreated_atを「X分前」のように変換 2var created_at = '2020-10-30 12:00:00.000000'; 3console.log( 'ago =', ago(created_at) );
全体は次のようになります。
JavaScript
1// ブラウザ言語取得 2var BROWSER_LANG = document.getElementsByTagName('html')[0].getAttribute('data-lang'); 3var BROWSER_LANG = (window.navigator.languages && window.navigator.languages[0]) || 4 window.navigator.language || 5 window.navigator.userLanguage || 6 window.navigator.browserLanguage; 7console.log( 'BROWSER_LANG =', BROWSER_LANG ); 8 9// データベースにある値(INSERTしたときの標準時)であるcreated_atを「X分前」のように変換 10var created_at = '2020-10-30 12:00:00.000000'; 11console.log( 'ago =', ago(created_at) ); 12 13// 変換を実行 14function ago(created_at){ 15 var result; 16 17 // 日付オブジェクト 18 created_at = new Date(created_at); 19 var created_at_local = created_at.toLocaleString(BROWSER_LANG, { timeZone: 'UTC' }); 20 created_at_local = new Date(created_at_local); 21 console.log( 'created_at_local =', created_at_local ); // ←ここがおかしい? 22 23 // 現在時刻との差分=経過時間 24 var diff = new Date().getTime() - created_at_local.getTime(); 25 26 // 経過時間をDateに変換 27 var elapsed = new Date(diff); 28 29 // 大きい単位から順に表示 30 if (elapsed.getUTCFullYear() - 1970) { 31 result = elapsed.getUTCFullYear() - 1970 + '年前'; 32 } else if (elapsed.getUTCMonth()) { 33 result = elapsed.getUTCMonth() + 'ヶ月前'; 34 } else if (elapsed.getUTCDate() - 1) { 35 result = elapsed.getUTCDate() - 1 + '日前'; 36 } else if (elapsed.getUTCHours()) { 37 result = elapsed.getUTCHours() + '時間前'; 38 } else if (elapsed.getUTCMinutes()) { 39 result = elapsed.getUTCMinutes() + '分前'; 40 } else { 41 result = elapsed.getUTCSeconds() + 'たった今'; 42 } 43 return result; 44} 45
試したこと
先に申し上げましたように、上記ソースコード21行目の「// ←ここがおかしい?」とある部分をコンソールに出し、おかしいのではと思いました。
この21行目は
created_at = 2020-10-30 12:00:00.000000
から日本の「+9」を加味して
created_at_local = 2020-10-30 19:00:00.000000
となっているのが本来だと思うのですがしかし
created_at_local = 2020-10-30 03:00:00.000000
となっていて、つまり「-9」されてしまっているものと見えます。
変換が逆なのかと思い次のように逆転させるとエラーでした。
js
1var created_at_local = created_at.toLocaleString(BROWSER_LANG, { timeZone: 'UTC' }); 2// ↓逆転させるとエラー 3var created_at_local = created_at.toLocaleString('UTC', { timeZone: BROWSER_LANG });
補足情報(FW/ツールのバージョンなど)
変換はフロントで実装したく、ツールはPHPなどでなくJavaScriptを考えています。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー