回答:
このページに基づいて、いつでもオプションを設定して、次のような秒を取り除くことができます
var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
Firefox、Chrome、IE9 +、Operaでサポートされています。Webブラウザコンソールで試してください。
hour: "2-digit"
私はChrome 42でもFF 37でも働いていません--- 両方にd = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})
戻ります"6:15 AM"
。
[]
特定のロケールを除外するために使用します。そのようにして、ユーザーロケールに留まりますtoLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
これは私にとってはうまくいきます:
var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});
Date.prototype.toLocaleStringによって返される値は実装に依存するため、取得したものを取得できます。文字列を解析して秒を削除することもできますが、ブラウザによって異なる場合があるため、使用中のすべてのブラウザに許可を与える必要があります。
独自の明確なフォーマットを作成することは、Dateメソッドを使用して難しくはありません。例えば:
function formatTimeHHMMA(d) {
function z(n){return (n<10?'0':'')+n}
var h = d.getHours();
return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM');
}
ロケールあり:
var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
私はこの問題の解決策も探していました。これが私が最終的に思いついたものです:
function getTimeStr() {
var dt = new Date();
var d = dt.toLocaleDateString();
var t = dt.toLocaleTimeString();
t = t.replace(/\u200E/g, '');
t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');
var result = d + ' ' + t;
return result;
}
ここで試すことができます:http : //jsfiddle.net/B5Zrx/
\ u200Eは、IEの一部のバージョンで見た書式設定文字です(Unicodeの左から右へのマークです)。
フォーマットされた時刻に「XX:XX:XX」のようなものが含まれている場合、それは秒単位の時刻でなければならず、最後の部分を削除します。このパターンが見つからない場合、何も変更されません。かなり安全ですが、奇妙な状況下では、秒を残すリスクがあります。
書式設定された時刻の部分の順序を変更するロケールがないことを望みます(たとえば、ss:mm:hhにする)。この左から右へのマークは、それについて私を少し緊張させていますが、右から左へのマーク(\ u202E)を削除しないのはこのためです-この場合、一致を見つけずに、そのような場合、秒でフォーマットされた時刻。
toLocaleTimeString()
すべてのロケールに当てはまるわけではない戻り値について多くの仮定を行います。
これを行う関数と、説明するコメントがあります:
function displayNiceTime(date){
// getHours returns the hours in local time zone from 0 to 23
var hours = date.getHours()
// getMinutes returns the minutes in local time zone from 0 to 59
var minutes = date.getMinutes()
var meridiem = " AM"
// convert to 12-hour time format
if (hours > 12) {
hours = hours - 12
meridiem = ' PM'
}
else if (hours === 0){
hours = 12
}
// minutes should always be two digits long
if (minutes < 10) {
minutes = "0" + minutes.toString()
}
return hours + ':' + minutes + meridiem
}
他の人が指摘したように、toLocaleTimeString()はブラウザーごとに異なる方法で実装できるため、この方法でより適切に制御できます。
JavaScriptのDateオブジェクトの詳細については、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Dateをご覧ください。
元の質問は、これまで見過ごされてきたもの、つまり単純な文字列分割で簡単に答えられると思います。返される時間はテキスト文字列です。「:」区切り文字で分割し、希望どおりに文字列を再構成してください。プラグインや複雑なスクリプトは不要です。そしてここに行く:
var myVar=setInterval(function(){myTimer()},1000);
function myTimer() {
var d = new Date();
currentNow = d.toLocaleTimeString();
nowArray = currentNow.split(':');
filteredNow = nowArray[0]+':'+nowArray[1];
document.getElementById("demo").innerHTML = filteredNow;
}
これは古い質問ですが、私も最近同じ問題を抱えていて、正規表現と文字列置換関数を使用するより簡単な解決策を考え出しました(外部のjsライブラリやECMAScriptの内部化APIに依存する必要はありません)。 :
var d = new Date();
var localeTime = d.toLocaleTimeString();
var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " ");
このアプローチでは、正規表現の先読みを使用して文字列の:ss AM / PMの終わりを取得し、:ssの部分をスペースに置き換えて、残りの文字列をそのまま返します。(文字通り「2桁のコロンと、それに続くAMまたはPMのいずれかが続くスペースを探し、コロン、2桁、スペースの部分をスペースだけで置き換えます」と言います。)
この式/アプローチは、en-USおよびen-USのようなロケールでのみ機能します。AM / PMを使用しないイギリス英語(en-GB)などでも同様の結果が必要な場合は、別の正規表現が必要です。
元の質問者のサンプル出力に基づいて、私は彼らが主にアメリカ人の聴衆とen-USタイムスキーマを扱っていたと思います。
日付を文字列に変換し、必要な部分文字列を連結します。
let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM
toLocaleTimeString
ロケール設定に応じて、ブラウザごとに異なる文字列を返します。これらの位置に依存することはできません。他の人のブラウザでは、異なる、おそらく壊れた結果が得られます。