web-dev-qa-db-ja.com

Javascriptでhh:mm AM / PMの形式で現在の時刻を取得するにはどうすればよいですか?

現在の時刻をHH:MM AM/PMの形式で貼り付ける必要があるJavascriptがあります。キャッチが1つあります。今から2時間後に始まる時間を入れる必要があります。たとえば、午後7時23分ではなく、午後9時23分を入れる必要があります。

var dateFormat = new Date("hh:mm a")のようなことをしようとしましたが、機能しませんでした。私も使用しようとしました:

var today = new Date();
var time = today.toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3")
alert(time);

しかし、私が見たのは、例えば6:23の代わりに18:23 PM(おそらく、toLocaleTimeString()とヨーロッパの私の場所のため)-それを行うための統一された方法が世界中で機能する可能性がありますか? 、2時間を最終結果に追加する方法が正確にわかりません。手伝ってくれませんか?ありがとう!

6
randomuser1

Dateメソッドを使用して、時間を設定および取得し、スニペットの行に沿った時間文字列を作成します。

[編集]楽しみのために:2つのDate.prototype拡張機能を使用して、より一般的なアプローチを追加しました。

var now = new Date();
now.setHours(now.getHours()+2);
var isPM = now.getHours() >= 12;
var isMidday = now.getHours() == 12;
var result = document.querySelector('#result');
var time = [now.getHours() - (isPM && !isMidday ? 12 : 0), 
            now.getMinutes(), 
            now.getSeconds() || '00'].join(':') +
           (isPM ? ' pm' : 'am');
            
result.innerHTML = 'the current time plus two hours = '+ time;

// a more generic approach: extend Date
Date.prototype.addTime = addTime;
Date.prototype.showTime = showTime;

result.innerHTML += '<h4>using Date.prototype extensions</h4>';
result.innerHTML += 'the current time plus twenty minutes = '+ 
                      new Date().addTime({minutes: 20}).showTime();
result.innerHTML += '<br>the current time plus one hour and twenty minutes = '+ 
                      new Date().addTime({hours: 1, minutes: 20}).showTime();
result.innerHTML += '<br>the current time <i>minus</i> two hours (format military) = '+ 
                      new Date().addTime({hours: -2}).showTime(true);
result.innerHTML += '<br>the current time plus ten minutes (format military) = '+ 
                      new Date().addTime({minutes: 10}).showTime(true);


function addTime(values) {
  for (var l in values) {
    var unit = l.substr(0,1).toUpperCase() + l.substr(1);
    this['set' + unit](this['get' + unit]() + values[l]);
  }
  return this;
}

function showTime(military) {
  var zeroPad = function () {
    return this < 10 ? '0' + this : this;
  };
  
  if (military) {
    return [ zeroPad.call(this.getHours()),
             zeroPad.call(this.getMinutes()),
             zeroPad.call(this.getSeconds()) ].join(':');
  }
  var isPM = this.getHours() >= 12;
  var isMidday = this.getHours() == 12;
  return time = [ zeroPad.call(this.getHours() - (isPM && !isMidday ? 12 : 0)),
                  zeroPad.call(this.getMinutes()),
                  zeroPad.call(this.getSeconds()) ].join(':') +
                (isPM ? ' pm' : ' am');

  
 
}
<div id="result"></div>
6
KooiInc

ワンライナーで現在時刻を12時間形式に変換できます

_new Date().toLocaleTimeString('en-US', { hour: 'numeric', hour12: true, minute: 'numeric' });
_

現在の時間に2時間追加します

Date.now() + 2 * 60 * 60 * 1000

したがって、次のように簡単な1行で実行できます。

new Date(Date.now() + 2 * 60 * 60 * 1000).toLocaleTimeString('en-US', { hour: 'numeric', hour12: true, minute: 'numeric' });

8
acesmndr

簡単に、あなたはこれを行うことができます


const date = new Date()
const options = {
  hour: 'numeric',
  minute: 'numeric',
  hour12: true
};
const time = new Intl.DateTimeFormat('en-US', options).format(date)
console.log(time)

詳細については、[ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat] を参照してください。

2
Naren

受け入れられた回答は、適切ではありますが、HH:MM AM/PMの形式要件を満たしていないように見えることに注意してください。真夜中を「0:0:38am」などとして返します。

これを行うには多くの方法があり、1つの代替方法を以下に示します。 「コードスニペットの実行」をクリックしてテストします。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Clock</title>
</head>
<body>
<span id="clock"  style="font-family: monospace; font-size: 48px; background-color: black; color: Lime; padding: 10px;">00:00:00 AM</span>
<script type="text/javascript">

function getTime( ) {
        var d = new Date( ); 
        d.setHours( d.getHours() + 2 ); // offset from local time
        var h = (d.getHours() % 12) || 12; // show midnight & noon as 12
        return (
                ( h < 10 ? '0' : '') + h +
                ( d.getMinutes() < 10 ? ':0' : ':') + d.getMinutes() +
                // optional seconds display
                // ( d.getSeconds() < 10 ? ':0' : ':') + d.getSeconds() + 
                ( d.getHours() < 12 ? ' AM' : ' PM' )
        );
        
}

var clock = document.getElementById('clock');
setInterval( function() { clock.innerHTML = getTime(); }, 1000 );
</script>
</body>
</html>
1
Roberto

これはうまくいくはずです。

var date = new Date();
var hour = date.getHours() - (date.getHours() >= 12 ? 12 : 0);
var period = date.getHours() >= 12 ? 'PM' : 'AM';

alert( hour + 2 + ':' + date.getMinutes() + ' ' +period);
0
Amir