web-dev-qa-db-ja.com

Javaスクリプトを使用して/ AMおよびPMで24時間を12時間に変換する

次のJSON戻り値を24時間形式からAMおよびPM付きの12時間形式に変換する最良の方法は何ですか?日付は同じままにする必要があります-フォーマットが必要なのは時刻だけです。

February 04, 2011 19:00:00

追伸jQueryを使用すると、簡単になります!また、Date.jsを使用せず、単純な関数/コードを好むでしょう。

56
Slythic

UPDATE 2:秒オプションなし

UPDATE:正午修正後、テスト済み: http://jsfiddle.net/aorcsik/xbtjE/

これを行うためにこの関数を作成しました:

function formatDate(date) {
  var d = new Date(date);
  var hh = d.getHours();
  var m = d.getMinutes();
  var s = d.getSeconds();
  var dd = "AM";
  var h = hh;
  if (h >= 12) {
    h = hh - 12;
    dd = "PM";
  }
  if (h == 0) {
    h = 12;
  }
  m = m < 10 ? "0" + m : m;

  s = s < 10 ? "0" + s : s;

  /* if you want 2 digit hours:
  h = h<10?"0"+h:h; */

  var pattern = new RegExp("0?" + hh + ":" + m + ":" + s);

  var replacement = h + ":" + m;
  /* if you want to add seconds
  replacement += ":"+s;  */
  replacement += " " + dd;

  return date.replace(pattern, replacement);
}

alert(formatDate("February 04, 2011 12:00:00"));
62
aorcsik

Ifステートメントなしで時間を変更する方法は次のとおりです。

hours = ((hours + 11) % 12 + 1);
93
TomTom
    //it is pm if hours from 12 onwards
    suffix = (hours >= 12)? 'pm' : 'am';

    //only -12 from hours if it is greater than 12 (if not back at mid night)
    hours = (hours > 12)? hours -12 : hours;

    //if 00 then it is 12 am
    hours = (hours == '00')? 12 : hours;
36
user1365977

出力に時間のみを必要とする人は、JavaScriptのDate :: toLocaleString()メソッドにオプションを渡すことができます。例:

var date = new Date("February 04, 2011 19:00:00");
var options = {
  hour: 'numeric',
  minute: 'numeric',
  hour12: true
};
var timeString = date.toLocaleString('en-US', options);
console.log(timeString);

timeStringは次のように設定されます。

午前8:00

秒も必要な場合は、オプションに「second: 'numeric'」を追加します。すべてのオプションについては this をご覧ください。

15
Vern Jensen

Prototypeを使用してそれを行う合理的に簡潔な方法を次に示します。

 Date.prototype.getFormattedTime = function(){
 var hours = this.getHours()== 0? "12":this.getHours()> 12? this.getHours()-12:this.getHours(); 
 var minutes =(this.getMinutes()<10? "0": "")+ this.getMinutes(); 
 var ampm = this.getHours()<12? "AM": "PM"; 
 var formatTime = hours + ":" + minutes + "" + ampm; 
 returnformatTime; 
} 

次に、文字列値を日付に変換し、新しいメソッドを使用するだけです。

 var stringValue = "2011年2月4日19:00:00; 
 var dateValue = new Date(stringValue); 
 varformatedTime = dateValue.getFormattedTime(); 

または、1行で:

 varformatedTime = new Date( "February 04、2011 19:00:00")。getFormattedTime(); 
6
wloescher

シンプルで清潔に保つ

var d = new Date();
var n = d.toLocaleString();

https://jsfiddle.net/rinu6200/3dkdxaad/#base

4
rinu mv
function pad(num) {return ("0" + num).slice(-2);}
function time1() {
  var today = new Date(),
    h = today.getHours(),
    m = today.getMinutes(),
    s = today.getSeconds();
    
  h = h % 12;
  h = h ? h : 12; // the hour '0' should be '12'
  clk.innerHTML = h + ':' + 
    pad(m) + ':' + 
    pad(s) + ' ' + 
    (h >= 12 ? 'PM' : 'AM');
}
window.onload = function() {
  var clk = document.getElementById('clk');
  t = setInterval(time1, 500);
}
<span id="clk"></span>
4
Prafulla

jQueryにはDateユーティリティがまったくありません。追加のライブラリを使用しない場合、通常の方法はJavaScript Dateオブジェクトを作成し、そこからデータを抽出して、自分でフォーマットすることです。

Dateオブジェクトを作成するには、JSONの日付文字列がDateが理解できる形式にすることを確認できます。これはIETF標準です(基本的には RFC 822セクション5 )。したがって、JSONを変更する機会があれば、それが最も簡単です。 (編集:あなたのフォーマットは実際にそのまま動作するかもしれません。)

JSONを変更できない場合は、文字列を自分で解析し、日、口、年、時間、分、秒を整数として取得し、それを使用してDateオブジェクトを作成する必要があります。

Dateオブジェクトを取得したら、必要なデータを抽出してフォーマットする必要があります。

   var myDate = new Date("4 Feb 2011, 19:00:00");
   var hours = myDate.getHours();
   var am = true;
   if (hours > 12) {
      am = false;
      hours -= 12;
   } else (hours == 12) {
      am = false;
   } else (hours == 0) {
      hours = 12;
   }

   var minutes = myDate.getMinutes();
   alert("It is " + hours + " " + (am ? "a.m." : "p.m.") + " and " + minutes + " minutes".);
3
RoToRa

1)24時間にするための「二乗」命令は12時間になりました。

var hours24 = new Date().getHours(); // retrieve current hours (in 24 mode)
var dayMode = hours24 < 12 ? "am" : "pm"; // if it's less than 12 then "am"
var hours12 = hours24 <= 12 ? (hours24 == 0 ? 12 : hours24) : hours24 - 12;
// "0" in 24-mode now becames "12 am" in 12-mode – thanks to user @Cristian
document.write(hours12 + " " + dayMode); // printing out the result of code

2)1行(アルゴリズムがわずかに異なる同じ結果):

var str12 = (h24 = new Date().getHours()) && (h24 - ((h24 == 0)? -12 : (h24 <= 12)? 0 : 12)) + (h24 < 12 ? " am" : " pm");

両方のオプションは、"5 pm""10 am"などの文字列を返します。

2
date = date.replace(/[0-9]{1,2}(:[0-9]{2}){2}/, function (time) {
    var hms = time.split(':'),
        h = +hms[0],
        suffix = (h < 12) ? 'am' : 'pm';
    hms[0] = h % 12 || 12;        
    return hms.join(':') + suffix
});

編集:私は午前12時/午後12時に対処するのを忘れていました。一定。

2

this をご覧ください。例の1つは言う:

var d = new Date(dateString);

Dateオブジェクトを取得したら、それをかなり簡単にプレイできます。 toLocaleDateString、toLocaleTimeStringを呼び出すか、getHoursが12より大きいかどうかをテストしてから、AM/PM時間を計算できます。

2
MeanEYE

この関数は両方向に変換します:12から24時間または24から12時間

function toggle24hr(time, onoff){
    if(onoff==undefined) onoff = isNaN(time.replace(':',''))//auto-detect format
    var pm = time.toString().toLowerCase().indexOf('pm')>-1 //check if 'pm' exists in the time string
    time = time.toString().toLowerCase().replace(/[ap]m/,'').split(':') //convert time to an array of numbers
    time[0] = Number(time[0])
    if(onoff){//convert to 24 hour:
        if((pm && time[0]!=12)) time[0] += 12
        else if(!pm && time[0]==12) time[0] = '00'  //handle midnight
        if(String(time[0]).length==1) time[0] = '0'+time[0] //add leading zeros if needed
    }else{ //convert to 12 hour:
        pm = time[0]>=12
        if(!time[0]) time[0]=12 //handle midnight
        else if(pm && time[0]!=12) time[0] -= 12
    }
    return onoff ? time.join(':') : time.join(':')+(pm ? 'pm' : 'am')
}

以下に例を示します。

//convert to 24 hour:
toggle24hr('12:00am')   //returns 00:00
toggle24hr('2:00pm')    //returns 14:00
toggle24hr('8:00am')    //returns 08:00
toggle24hr('12:00pm')   //returns 12:00

//convert to 12 hour:
toggle24hr('14:00')    //returns 2:00pm
toggle24hr('08:00')    //returns 8:00am
toggle24hr('12:00')    //returns 12:00pm
toggle24hr('00:00')    //returns 12:00am

//you can also force a specific format like this:
toggle24hr('14:00',1)    //returns 14:00
toggle24hr('14:00',0)    //returns 2:00pm
1
cronoklee
 function GetTime(date) {
        var currentTime = (new Date(date))
        var hours = currentTime.getHours()
        //Note: before converting into 12 hour format
        var suffix = '';
        if (hours > 11) {
            suffix += "PM";
        } else {
            suffix += "AM";
        }
        var minutes = currentTime.getMinutes()
        if (minutes < 10) {
            minutes = "0" + minutes
        }
        if (hours > 12) {
            hours -= 12;
        } else if (hours === 0) {
            hours = 12;
        }
        var time = hours + ":" + minutes + " " + suffix;
        return time;
    }
1
aamir sajjad

私は比較的初心者ですが、ここに自分のプロジェクトの1つで思いついたものがあり、うまくいくようです。より簡単な方法があるかもしれません。

function getTime() {
    var nowTimeDate = new Date();
    var nowHour = nowTimeDate.getHours();
    var nowMinutes = nowTimeDate.getMinutes();
    var suffix = nowHour >= 12 ? "pm" : "am";
    nowHour = (suffix == "pm" & (nowHour > 12 & nowHour < 24)) ? (nowHour - 12) : nowHour;
    nowHour = nowHour == 0 ? 12 : nowHour;
    nowMinutes = nowMinutes < 10 ? "0" + nowMinutes : nowMinutes;
    var currentTime = nowHour + ":" + nowMinutes + suffix;
    document.getElementById("currentTime").innerHTML = currentTime;
}
1
Dave Irwin
var dt = new Date();
    var h =  dt.getHours(), m = dt.getMinutes();
    var thistime = (h > 12) ? (h-12 + ':' + m +' PM') : (h + ':' + m +' AM');
console.log(thistime);

デモ

1
Muhammad Tahir

以下のコードで試してください

var s = "15 Feb 2015 11.30 a.m";
        var times = s.match("((([0-9])|([0-2][0-9])).([0-9][0-9])[\t ]?((a.m|p.m)|(A.M|P.M)))");            
        var time = "";

        if(times != null){                          
            var hour = times[2];
            if((times[6] == "p.m" || times[6] == "P.M")){
                if(hour < 12){
                    hour = parseInt(hour) + parseInt(12);
                }else if(hour == 12){
                    hour = "00";
                }
            }
            time = [hour, times[5], "00"].join(":");

        }

ありがとう

1

これは私のために働いた!

function main() {
  var time = readLine();
  var formattedTime = time.replace('AM', ' AM').replace('PM', ' PM');
  var separators = [':', ' M'];
  var hms = formattedTime.split(new RegExp('[' + separators.join('') + ']'));
  if (parseInt(hms[0]) < 12 && hms[3] == 'P')
      hms[0] = parseInt(hms[0]) + 12;
  else if (parseInt(hms[0]) == 12 && hms[3] == 'A')
      hms[0] = '00';
  console.log(hms[0] + ':' + hms[1] + ':' + hms[2]);

}
1
Ishu nanda

これは、am/pmで24時間形式を12時間に変換する関数を呼び出すHTMLコードです

<pre id="tests" onClick="tConvert('18:00:00')">
  test on click 18:00:00
</pre>
<span id="rzlt"></span>

今jsコードでこのtConvert関数をそのまま書いてください

 function tConvert (time)
  {
     
   // Check correct time format and split into components
   time = time.toString ().match (/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];

    if (time.length > 1) 
    { // If time format correct
        
      time = time.slice (1);  // Remove full string match value
      time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
      time[0] = +time[0] % 12 || 12; // Adjust hours
    }
    //return time; // return adjusted time or original string
      var tel = document.getElementById ('rzlt');
      
      tel.innerHTML= time.join ('');
  }

18:00:00から6:00:00 PMに変換する

1
Mohsin Shoukat

とにかく多くの文字列操作を行うことになりますので、なぜ日付文字列自体を操作しないのですか?

ブラウザは、日付文字列の形式を変えます。

Netscape ::: Fri May 11 2012 20:15:49 GMT-0600(Mountain Daylight Time)

IE :::金5月11日20:17:33 MDT 2012

そのため、確認する必要があります。

var D = new Date().toString().split(' ')[(document.all)?3:4];

これにより、Dは24時間のHH:MM:SS文字列に等しく設定されます。それをコロンで分割すると、最初の要素は時間になります。

var H = new Date().toString().split(' ')[(document.all)?3:4].split(':')[0];

can 24時間を12時間に変換しますが、実際にはここでは言及していません。おそらく、時間を時計から変換するときに数学的に実際にやっていることはかなり危険だからです。実際、あなたがしていることは23を追加し、それを12でmodし、1を追加することです

twelveHour = ((twentyfourHour+23)%12)+1;

そのため、たとえば、日付文字列から全体の時間を取得し、時間を変更して、すべてを新しい時間で表示できます。

var T = new Date().toString().split(' ')[(document.all)?3:4].split(':');
T[0] = (((T[0])+23)%12)+1;
alert(T.join(':'));

スマートな正規表現を使用すると、おそらく日付文字列のHH:MM:SS部分から時間を引き出し、それらをすべて同じ行で変更できます。置換に関数を配置しないと、逆参照$ 1を計算で使用できないため、これはばかげた行になります。

これは次のようになります。

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/,function(){return ((parseInt(RegExp.$1)+23)%12)+1} );

私が言うように、これはばかげています。後方参照で計算を実行できるライブラリを使用している場合、行は次のようになります。

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/, (($1+23)%12)+1);

そして、あなたがそれをうまく文書化すれば、それは実際に使用可能なコードとして問題外ではありません。その行は言う:

日付文字列を作成し、スペースで分割し、ブラウザの適切な部分を取得し、最初の2桁の数字をその数字に変更します。

ストーリーの要点は、24時間を12時間に変換する方法は、明白な数学的計算ではないということです。

23を追加し、MODを12で追加してから、もう1つ追加します。

0
2strokeMotor

ここに私のために働いた素敵な小さな機能があります。

function getDisplayDatetime() {
    var d = new Date(); var hh = d.getHours(); var mm = d.getMinutes(); var dd = "AM"; var h = hh;

    if (mm.toString().length == 1) {
        mm = "0" + mm;
    }

    if (h >= 12) {
        h = hh - 12;
        dd = "PM";
    }

    if (h == 0) {
        h = 12;
    }
    var Datetime = "Datetime: " + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getUTCDate() + " " + h + ":" + mm;
    return Datetime + " " + dd;
}
0
Steven

どうぞ

var myDate = new Date("February 04, 2011 19:00:00");
var hr = myDate.getHours(); 
var convHrs = "";
var ampmSwitch = "";
ampmSwitch = (hr > 12)? "PM":"AM"; 
convHrs = (hr >12)? hr-12:hr;
// Build back the Date / time using getMonth/ getFullYear and getDate and other functions on the myDate object. Enclose it inside a func and there you got the working 12 hrs converter ;)

そして、これがyasのコンバーターfuncです;)ハッピーコーディング!!

function convertTo12Hrs(yourDateTime){
    var myDate = new Date(yourDateTime);
    var dtObject = new Object();
    var monthsCollection = {0:"January", 1:"February",2:"March",3:"April",4:"May",5:"June",6:"July",7:"August",8:"September",9:"October",10:"November",11:"December"};
    dtObject.year = myDate.getFullYear();
    dtObject.month = monthsCollection[myDate.getMonth()];
    dtObject.day = (myDate.getDate()<10)?"0"+myDate.getDate():myDate.getDate();
    dtObject.minutes = (myDate.getMinutes() < 10)? "0"+myDate.getMinutes():myDate.getMinutes();
    dtObject.seconds = (myDate.getSeconds() < 10)? "0"+myDate.getSeconds():myDate.getSeconds();
    // Check if hours are greater than 12? Its PM
    dtObject.ampmSwitch = (myDate.getHours() > 12)? "PM":"AM";
    // Convert the hours
    dtObject.hour = (myDate.getHours() > 12)?myDate.getHours()-12:myDate.getHours();
    // Add the 0 as prefix if its less than 10
    dtObject.hour = (dtObject.hour < 10)? "0"+dtObject.hour:dtObject.hour;

    // Format back the string as it was or return the dtObject object or however you like. I am returning the object here
    return dtObject;
}

convertTo12Hrs( "February 04、2011 19:00:00");のように呼び出します。それはあなたにオブジェクトを返します。それはあなたが空想としてあなたのdatetime文字列をフォーマットバックするために使用することができます...

0
A Malik

このより一般的な機能を試すことができます:

function to12HourFormat(date = (new Date)) {
  return {
    hours: ((date.getHours() + 11) % 12 + 1),
    minutes: date.getMinutes(),
    meridian: (date.getHours() >= 12) ? 'PM' : 'AM',
  };
}

柔軟なオブジェクト形式を返します。

https://jsbin.com/vexejanovo/edit

0
AndrewMcLagan

すでに答えがあることに気付きましたが、純粋なJavaScriptを使用して、独自のソリューションを共有したかったのです。

function curTime(pm) {
  var dt = new Date();
  var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
  var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : ""); 
  return time;
}

次のコードブロックを使用して https://jsfiddle.net/j2xk312m/3/ で実際に動作を確認できます。

(function() {

  function curTime(pm) {
    var dt = new Date();
    var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
    var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : ""); 
    return time;
  }

  alert("12-hour Format:    "+curTime(true)+"\n24-hour Format:    "+curTime(false));

})();
0