Jak wyświetlać JavaScript w czasie 12 godzin w formacie AM / PM?


306

Jak wyświetlać obiekt JavaScript daty i godziny w formacie 12-godzinnym (AM / PM)?


3
Nie marnuj czasu stackoverflow.com/a/17538193/3541385 działa.
Ritesh

2
@Ritesh WARNING: toLocaleTimeString() may behave differently based on region / location.Zmierz dwa razy, wytnij raz.
Opuszczony

@AbandonedCart to w rzeczywistości powiedzenie?
gilbert-v

1
@ gilbert-v One should double-check one's measurements for accuracy before cutting a piece of wood; otherwise it may be necessary to cut again, wasting time and material.To pytanie prawdopodobnie lepiej zadać w Google.
Opuszczony

Nigdy nie przyzwyczaję się do tego, jak cholernie zawiłe jest to, że próbuje pracować z prostymi datami w JavaScript. 😠
ashleedawg

Odpowiedzi:


545

function formatAMPM(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0'+minutes : minutes;
  var strTime = hours + ':' + minutes + ' ' + ampm;
  return strTime;
}

console.log(formatAMPM(new Date));


3
Również zadeklarowałeś zmienną „hours” dwa razy, ale uczyniłeś „strTime” przypadkowym globalnym. Nie jest to niezwykle eleganckie, ale wydaje się, że jest to właściwa technika z wykorzystaniem metod natywnych.
Jon z

Cześć, czy możesz mi wyjaśnić, co robisz z tym: minuty = minuty <10? „0” + minuty: minuty;
Balz

2
@Balz Jeśli liczba minut jest mniejsza niż 10 (np. 16:04), to instrukcja dodaje ciąg „0”, tak że sformatowane wyjście to „16:04” zamiast „16: 16”. Zauważ, że w tym czasie minuty zmieniają się z liczby na ciąg.
Caleb Bell

7
Wolę to minutes = ('0'+minutes).slice(-2);niż minutes = minutes < 10 ? '0'+minutes : minutes;
Vignesh

1
Rozwiązanie @Vignesh na minuty jest lepsze, ponieważ jeśli robisz to sugerowane 21:00:00 staje się 9: 000. Vignesh's podaje poprawne minuty jako: 00. Jeśli miałbyś skorzystać z powyższego rozwiązania, musiałbyś również uwzględnić 00. (mintues> 0 i&min <10)? „0” + minuty: minuty;
Robbie Smith,

201

Jeśli chcesz tylko pokazać godziny, to ...

var time = new Date();
console.log(
  time.toLocaleString('en-US', { hour: 'numeric', hour12: true })
);  

Wyjście: 7 rano

Jeśli chcesz pokazać minuty, to ...

var time = new Date();
console.log(
  time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })
);

Wyjście: 07:23


Co z godzinami, minutami i godzinami przedpołudniowymi?
Reutsey

3
toLocaleStringjest obsługiwany tylko w IE11 +.
Neolisk,

Od lutego 2018 r. Działa dobrze na chrome Neolisk - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
lfender6445

powinien zwrócić 07:23, IMO
Humble Dolt

@HumbleDolt Może być mylące, 'numeric'z '2-digit'.
hon2a

55

Możesz również rozważyć użycie czegoś takiego jak date.js :

<html>
<script type="text/javascript" src="http://www.datejs.com/build/date.js"></script>

<script>
   (function ()
   {
      document.write(new Date().toString("hh:mm tt"));
   })();
</script>
</html>


45

Oto sposób użycia wyrażenia regularnego:

console.log(new Date('7/10/2013 20:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))
console.log(new Date('7/10/2013 01:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))

Tworzy to 3 pasujące grupy:

  • ([\d]+:[\d]{2}) - Godzina: minuta
  • (:[\d]{2}) - Sekundy
  • (.*) - przestrzeń i kropka (kropka to oficjalna nazwa AM / PM)

Następnie wyświetla pierwszą i trzecią grupę.

OSTRZEŻENIE: toLocaleTimeString () może zachowywać się inaczej w zależności od regionu / lokalizacji.


3
Ludzie nie używają Regex w wystarczającym stopniu. Działa to dla mnie bez dodawania powyższych sugestii dotyczących biblioteki jquery / microsoftajax.
uadrive

To, co byłoby regexem, miałoby końcowe zero na początku godziny, gdyby była to jedna cyfra. Powiedz, że w twoim pierwszym przykładzie o 20:12 będzie to 20:12?
RADXack

1
@ 404 to jest to samo, ([\d]+:[\d]{2})jest tym, czym jesteśmy zainteresowani. Użyj dwukropka (:) jako separatora i widzimy, że pierwsza część to [\d]+. Plus oznacza jeden lub więcej. Więc szuka jednej lub więcej cyfr (w tym zera. Gdybyś musiał zagwarantować zero, to byłoby (0[\d]:[\d]{2}). To teraz czyta, poszukaj 0 plus jeszcze jednej cyfry, potem dwukropka, a potem reszty.
Steve Tauber

1
console.log (new Date (). toLocaleTimeString (). replace (/ ([\ d] +: [\ d] {2}) (: [\ d] {2}) (. *) /, "$ 1 $ 3 $ „)); Aby uzyskać aktualny czas
mujaffars

35

Jeśli nie musisz drukować rano / po południu, znalazłem następujące miłe i zwięzłe:

var now = new Date();
var hours = now.getHours() % 12 || 12;  // 12h instead of 24h, with 12 instead of 0. 

Jest to oparte na odpowiedzi @ bbrame.


3
@koolinc na północ pokazuje 12. Nie jestem pewien, jakie jeszcze byłoby pożądane zachowanie.
rattray

Poprawiono mnie. W moim kraju używany jest zegar 24-godzinny, więc nie znam go tak dobrze. Rzeczywiście północ to 12:00.
KooiInc

16

O ile mi wiadomo, najlepszym sposobem na osiągnięcie tego bez rozszerzeń i skomplikowanego kodowania jest:

     date.toLocaleString([], { hour12: true});

Format JavaScript AM / PM

<!DOCTYPE html>
<html>
<body>
    <p>Click the button to display the date and time as a string.</p>

    <button onclick="myFunction()">Try it</button>
    <button onclick="fullDateTime()">Try it2</button>
    <p id="demo"></p>
    <p id="demo2"></p>
    <script>
        function myFunction() {
            var d = new Date();
            var n = d.toLocaleString([], { hour: '2-digit', minute: '2-digit' });
            document.getElementById("demo").innerHTML = n;
        }
        function fullDateTime() {
            var d = new Date();          
            var n = d.toLocaleString([], { hour12: true});
            document.getElementById("demo2").innerHTML = n;
        }
    </script>
</body>
</html>

Znalazłem to sprawdzając to pytanie.

Jak korzystać z .toLocaleTimeString () bez wyświetlania sekund?



12

Poniżej znajdziesz rozwiązanie

var d = new Date();
var amOrPm = (d.getHours() < 12) ? "AM" : "PM";
var hour = (d.getHours() < 12) ? d.getHours() : d.getHours() - 12;
return   d.getDate() + ' / ' + d.getMonth() + ' / ' + d.getFullYear() + ' ' + hour + ':' + d.getMinutes() + ' ' + amOrPm;

Powinny być mniejsze lub równe do obliczenia godziny, w przeciwnym razie południe pokaże się jako 0. Więc: var hour = (d.getHours () <= 12). Nadal występuje problem z północą, więc musisz sprawdzić, czy zero, a następnie ustawić również na 12.
Ryan,

11

posługiwać się dateObj.toLocaleString([locales[, options]])

Opcja 1 - Korzystanie z ustawień regionalnych

var date = new Date();
console.log(date.toLocaleString('en-US'));

Opcja 2 - Korzystanie z opcji

var options = { hour12: true };
console.log(date.toLocaleString('en-GB', options));

Uwaga: obsługiwane we wszystkich przeglądarkach oprócz bankomatu safari



9

Krótki RegExp dla en-US:

var d = new Date();
d = d.toLocaleTimeString().replace(/:\d+ /, ' '); // current time, e.g. "1:54 PM"

to nie działa w najnowszych przeglądarkach Safari i Firefox, czas nadal używa formatu 24-godzinnego
euther

1
z czasem odpowiedzi stają się nieaktualne. Możesz edytować i aktualizować!
Geo

To sprawi, że łańcuch będzie wyglądał 1:54 PM CDT. Aby usunąć CDTzmianę wyrażenia regularnego na następujące .replace(/:\d+ |\CDT/g, ' '). Chociaż CDT to tylko moja strefa czasowa. Jeśli masz inną strefę czasową, musisz zmienić kod strefy.
sadmicrowave

Dane wyjściowe toLocaleTimeString zależą od implementacji, więc nie wszędzie niezawodnie ten sam format.
RobG

9

W nowoczesnych przeglądarkach używaj Intl.DateTimeFormati wymuszaj format 12-godzinny z opcjami:

    let now = new Date();

    new Intl.DateTimeFormat('default',
        {
            hour12: true,
            hour: 'numeric',
            minute: 'numeric'
        }).format(now);

    // 6:30 AM

Użycie defaultspowoduje honorowanie domyślnego ustawienia narodowego przeglądarki, jeśli dodasz więcej opcji, ale nadal będzie wyświetlać format 12-godzinny.


aby tego użyć, przypisz nowy ciąg do zmiennej, np .: let result = new Intl.DateTi .... alert (wynik);
Scot Nery

7

Użyj do tego Moment.js

Podczas używania mom.js użyj poniższych kodów w JavaScript

H, HH       24 hour time
h, or hh    12 hour time (use in conjunction with a or A)

format()Metoda zwraca datę w formacie specyficznym.

moment(new Date()).format("YYYY-MM-DD HH:mm"); // 24H clock
moment(new Date()).format("YYYY-MM-DD hh:mm A"); // 12H clock (AM/PM)
moment(new Date()).format("YYYY-MM-DD hh:mm a"); // 12H clock (am/pm)


4

Myślę, że to tutaj działa dobrze.

var date_format = '12'; /* FORMAT CAN BE 12 hour (12) OR 24 hour (24)*/


var d       = new Date();
var hour    = d.getHours();  /* Returns the hour (from 0-23) */
var minutes     = d.getMinutes();  /* Returns the minutes (from 0-59) */
var result  = hour;
var ext     = '';

if(date_format == '12'){
    if(hour > 12){
        ext = 'PM';
        hour = (hour - 12);

        if(hour < 10){
            result = "0" + hour;
        }else if(hour == 12){
            hour = "00";
            ext = 'AM';
        }
    }
    else if(hour < 12){
        result = ((hour < 10) ? "0" + hour : hour);
        ext = 'AM';
    }else if(hour == 12){
        ext = 'PM';
    }
}

if(minutes < 10){
    minutes = "0" + minutes; 
}

result = result + ":" + minutes + ' ' + ext; 

console.log(result);

i przykład plunker tutaj


4
<script>
var todayDate = new Date();
var getTodayDate = todayDate.getDate();
var getTodayMonth =  todayDate.getMonth()+1;
var getTodayFullYear = todayDate.getFullYear();
var getCurrentHours = todayDate.getHours();
var getCurrentMinutes = todayDate.getMinutes();
var getCurrentAmPm = getCurrentHours >= 12 ? 'PM' : 'AM';
getCurrentHours = getCurrentHours % 12;
getCurrentHours = getCurrentHours ? getCurrentHours : 12; 
getCurrentMinutes = getCurrentMinutes < 10 ? '0'+getCurrentMinutes : getCurrentMinutes;
var getCurrentDateTime = getTodayDate + '-' + getTodayMonth + '-' + getTodayFullYear + ' ' + getCurrentHours + ':' + getCurrentMinutes + ' ' + getCurrentAmPm;
alert(getCurrentDateTime);
</script>

2
Zdobycie modułu godziny z 12 jest doskonałe! Zapobiega to zerowaniu, gdy jest godzina 12:00 lub 12:00
Lynnell Emmanuel Neri

3

Oto inny sposób, który jest prosty i bardzo skuteczny:

        var d = new Date();

        var weekday = new Array(7);
        weekday[0] = "Sunday";
        weekday[1] = "Monday";
        weekday[2] = "Tuesday";
        weekday[3] = "Wednesday";
        weekday[4] = "Thursday";
        weekday[5] = "Friday";
        weekday[6] = "Saturday";

        var month = new Array(11);
        month[0] = "January";
        month[1] = "February";
        month[2] = "March";
        month[3] = "April";
        month[4] = "May";
        month[5] = "June";
        month[6] = "July";
        month[7] = "August";
        month[8] = "September";
        month[9] = "October";
        month[10] = "November";
        month[11] = "December";

        var t = d.toLocaleTimeString().replace(/:\d+ /, ' ');

        document.write(weekday[d.getDay()] + ',' + " " + month[d.getMonth()] + " " + d.getDate() + ',' + " " + d.getFullYear() + '<br>' + d.toLocaleTimeString());

    </script></div><!-- #time -->

1

za pomocą tego prostego kodu możesz określić godzinę przed południem lub po południu

var today=new Date();
var noon=new Date(today.getFullYear(),today.getMonth(),today.getDate(),12,0,0);
var ampm = (today.getTime()<noon.getTime())?'am':'pm';

0

var d = new Date();
var hours = d.getHours() % 12;
  hours = hours ? hours : 12;
    var test = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][(d.getMonth() + 1)] + " " + 
    ("00" + d.getDate()).slice(-2) + " " + 
    d.getFullYear() + " " + 
    ("00" + hours).slice(-2) + ":" + 
    ("00" + d.getMinutes()).slice(-2) + ":" + 
    ("00" + d.getSeconds()).slice(-2) + ' ' + (d.getHours() >= 12 ? 'PM' : 'AM'); 
    
document.getElementById("demo").innerHTML = test;
<p id="demo" ></p>


0
<h1 id="clock_display" class="text-center" style="font-size:40px; color:#ffffff">[CLOCK TIME DISPLAYS HERE]</h1>



<script>
            var AM_or_PM = "AM";

            function startTime(){

                var today = new Date();
                var h = today.getHours();
                var m = today.getMinutes();
                var s = today.getSeconds();

                h = twelve_hour_time(h);
                m = checkTime(m);
                s = checkTime(s);



                document.getElementById('clock_display').innerHTML =
                    h + ":" + m + ":" + s +" "+AM_or_PM;
                var t = setTimeout(startTime, 1000);

            }

            function checkTime(i){

                if(i < 10){
                    i = "0" + i;// add zero in front of numbers < 10
                }
                return i;
            }

            // CONVERT TO 12 HOUR TIME. SET AM OR PM
            function twelve_hour_time(h){

                if(h > 12){
                    h = h - 12;
                    AM_or_PM = " PM";
                }
                return h;

            }

            startTime();

        </script>

0
function getDateTime() {
  var now = new Date();
  var year = now.getFullYear();
  var month = now.getMonth() + 1;
  var day = now.getDate();

  if (month.toString().length == 1) {
    month = '0' + month;
  }
  if (day.toString().length == 1) {
    day = '0' + day;
  }

  var hours = now.getHours();
  var minutes = now.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12;
  minutes = minutes < 10 ? '0' + minutes : minutes;
  var timewithampm = hours + ':' + minutes + ' ' + ampm;

  var dateTime = monthNames[parseInt(month) - 1] + ' ' + day + ' ' + year + ' ' + timewithampm;
  return dateTime;
}

0

Oto moje rozwiązanie

function getTime() {
var systemDate = new Date();
var hours = systemDate.getHours();
var minutes = systemDate.getMinutes();
var strampm;
if (hours >= 12) {
    strampm= "PM";
} else {
    strampm= "AM";
}
hours = hours % 12;
if (hours == 0) {
    hours = 12;
}
_hours = checkTimeAddZero(hours);
_minutes = checkTimeAddZero(minutes);
console.log(_hours + ":" + _minutes + " " + strampm);
}

function checkTimeAddZero(i) {
if (i < 10) {
    i = "0" + i
}
return i;
}

-1

Lub po prostu wykonaj następujący kod:

    <script>
        time = function() {
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            m = checkTime(m);
            s = checkTime(s);
            document.getElementById('txt_clock').innerHTML = h + ":" + m + ":" + s;     
            var t = setTimeout(function(){time()}, 0);
        }

        time2 = function() {
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            m = checkTime(m);
            s = checkTime(s);
            if (h>12) {
                document.getElementById('txt_clock_stan').innerHTML = h-12 + ":" + m + ":" + s;
            }               
            var t = setTimeout(function(){time2()}, 0);
        }

        time3 = function() {
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            if (h>12) {
                document.getElementById('hour_line').style.width = h-12 + 'em'; 
            }
            document.getElementById('minute_line').style.width = m + 'em';  
            document.getElementById('second_line').style.width = s + 'em';  
            var t = setTimeout(function(){time3()}, 0);
        }

        checkTime = function(i) {
            if (i<10) {i = "0" + i};  // add zero in front of numbers < 10
            return i;
        }           
    </script>


-1

Krótka i słodka implementacja:

// returns date object in 12hr (AM/PM) format
var formatAMPM = function formatAMPM(d) {
    var h = d.getHours();
    return (h % 12 || 12)
        + ':' + d.getMinutes().toString().padStart(2, '0')
        + ' ' + (h < 12 ? 'A' : 'P') + 'M';
};

-1

Spróbuj tego

      var date = new Date();
      var hours = date.getHours();
      var minutes = date.getMinutes();
      var seconds = date.getSeconds();
      var ampm = hours >= 12 ? "pm" : "am";

To jest niepoprawne. Godziny mogą być dłuższe niż 12.
Utsav T

O 12.00 var ampm będzie „pm”. Tak więc od 12.00 do 23.00 będzie 12 do 23, które przechowują wartość „pm”, a dla innych var ampm będzie przechowywać wartość „am”. Nadzieję, że rozumiesz.
Pani Juyel Rana

Cześć Juyel! Rzeczywiście, gdy liczba godzin jest większa niż 12, wartością będzie PM. Ale pytanie brzmi: „Jak wyświetlać JavaScript datetime w 12-godzinnym formacie AM / PM?” - musisz pomóc OP przekonwertować cały czas do formatu AM / PM. Na przykład 14:30 to 14:30.
Utsav T
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.