Saniyeler göstermeden .toLocaleTimeString () yöntemini nasıl kullanırım?


163

Şu anda saniyeleri göstermeden kullanıcının saatini görüntülemeye çalışıyorum. Javascript's .toLocaleTimeString () kullanarak bunu yapabilirim bir yolu var mı?

Bunun gibi bir şey yapmak:

var date = new Date();
var string = date.toLocaleTimeString();

kullanıcının saatini her birimde gösterecektir, örneğin şu anda 3:39:15 PM. Aynı dizeyi saniyeler olmadan görüntüleyebilir miyim? (örneğin, 15:39)

Yanıtlar:


317

Saniyelerden kurtulmak için bu sayfaya göre ayarlayabileceğiniz seçenekleri her zaman ayarlayabilirsiniz.

var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

Firefox, Chrome, IE9 + ve Opera tarafından desteklenir. Web tarayıcısı konsolunuzda deneyin.


2
Teşekkürler, bu cevap için saatlerce bakıyordum.
MustafaP

5
FYI hour: "2-digit"Chrome 42 veya FF 37'de benim için çalışmıyor - her ikisinde de d = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})geri dönüyor "6:15 AM".
user9645

16
[]belirli bir yerel ayarı dışarıda bırakmak için kullanın . Bu şekilde kullanıcıların yerel ayarında toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
kalacaksınız

12
krom 51 çalışır:new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
rofrol

1
Evet, bunu buraya gönderdiğimden beri 4 yıl geçti, çok şey değişti. Artık belirtmenize gerek yok. Saygılarımızla
CJLopez

10

Bu benim için çalışıyor:

var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});


6
Mart 2020'den itibaren timeStyle seçeneğinin Firefox, Edge / IE ve Safari'de değil, yalnızca Chrome ve Opera'da desteklendiğini belirtmek gerekir . Geniş kapsama alanı istiyorsanız, şimdilik saat ve dakika seçeneklerine bağlı kalmak muhtemelen daha iyidir.
cehri

Safari / iOS için, bu yalnızca ABD'de ÖÖ / ÖÖ'nün olduğu yerlerde çalışır. tr-ABD 15:16, diğer yerel ayarlar 15:16:00 görüntüler.
PassKit

8

Date.prototype.toLocaleString tarafından döndürülen değer , uygulamaya bağlıdır, bu nedenle ne elde ederseniz edin. Saniyeyi kaldırmak için dizeyi ayrıştırmayı deneyebilirsiniz, ancak farklı tarayıcılarda farklı olabilir, bu nedenle kullanılan her tarayıcı için izin vermeniz gerekir.

Date yöntemlerini kullanarak kendi, açık bir biçiminizi oluşturmak zor değildir. Örneğin:

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');
}

7
ToLocaleTimeString öğesinden döndürülen dizeyi ayrıştırmayın. Birkaç yıldır sorunsuz çalışıyordum. Ama sonra bugün işe yaramadığını fark ettim. Date.parse tarafından işlenemeyen özel unicode karakterler (ör. 0x200E, soldan sağa işaret) olduğu anlaşılıyor. Bunun geldiğini hiç görmedim. Bu yüzden tüm yerel ayarları kullanmayı bırakacağım ve sadece kendi zaman formatlı dizelerimi oluşturacağım. Bu beni böyle kötü sürprizlerden kurtaracak.
Gabe Halsmer

@ GabeHalsmer-I do not ve asla, ayrıştırma dizelerine Date.parse izin (örneğin son paragraf tavsiye burada ). Ama bu öyle düşünüyorum eğer (örneğin "cevabını missunderstood gelmiş, hiç söz edilmemiş, burada alakasız Sen ayrıştırma deneyebilirsiniz ...").
RobG

Güzel bağlantı. Özetle, insanlar ya kendi ayrıştırmalarını ya da kendi ToString yöntemlerini yapmalıdır, çünkü Date.prototype.toLocalString ve Date.parse temel olarak uyumsuzdur. Bir ToString yapmak benim için en kolay şey gibi görünüyordu. Ama sen kendi ayrışmanı uyguladın. Yani her ikisi de insanlar için çalışır. Herkesi haberdar etmek istediğim en önemli şey Date.parse'ın toLocaleString ile çalışmadığıydı. Ve ne kadar ince olduğu için bu uyumsuzluğu izlemem saatler sürdü. Soldan Sağa işaretleri Visual Studio'nun hata ayıklayıcısında görünmez.
Gabe Halsmer

Harika, bir başka tamamen yanlış yönlendirilmiş oy. İnsanların isimlerini onlara vermek istememesine şaşmamalı.
RobG

Tarihlerin başka biçimlere depolanması ve taşınması için, toISOString ve getTime muhtemelen yeniden arşivleme için en güvenli tarih biçimini sağlar. Ben son on yıl içinde getTime ve ISO değerleri döndürülen UTC milisaniye sürümünü işlemiyor JS uygulaması farkında değilim de bir loooonnng süre için ayrıştırılabilir bir tarih biçimi olarak özellikleri olmuştur. Ancak UI öğelerinden tarihleri ​​asla okuma. Bu, uygulama katmanınızdan gelmelidir. Ve her zaman Safari'de test edin. Tarih nesnesi hakkında IE6 düzeyinde gerizekalılar.
Erik Reppen

7

Yerel ayarlarla:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})

0

Ben de bu soruna çözüm arıyordum, işte sonunda bulduğum şey:

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;
}

Burada deneyebilirsiniz: http://jsfiddle.net/B5Zrx/

\ u200E, bazı IE sürümlerinde gördüğüm bazı biçimlendirme karakteridir (soldan sağa unicode işaretidir).

Biçimlendirilmiş zaman "XX: XX: XX" gibi bir şey içeriyorsa sanırım saniye ile zaman olmalı ve son parçayı kaldırıyorum, eğer bu kalıbı bulamazsam, hiçbir şey değişmez. Oldukça güvenli, ancak bazı garip durumlarda saniye ayrılma riski vardır.

Ben sadece biçimlendirilmiş zaman bölümlerinin sırasını değiştirecek hiçbir yerel olmadığını umuyoruz (örneğin ss: mm: ss yapmak). Bu soldan sağa işaret beni biraz gerginleştiriyor, bu yüzden sağdan sola işaretini kaldırmıyorum (\ u202E) - Bu durumda bir eşleşme bulmamayı ve bu durumda saniye ile biçimlendirilmiş zaman.


1
+1 Soruyu doğru cevaplayan tek kişi sensin . Teşekkürler dostum
mate64

1
Bu, toLocaleTimeString()tüm yerel ayarlar için geçerli olmayabilecek getiriler hakkında birçok varsayım yapar .
AJ Richardson

0

Gereksinimlerim için çalışan bunu deneyebilirsiniz.

var d = new Date();
d.toLocaleTimeString().replace(/:\d{2}\s/,' ');

veya

d.toLocaleString().replace(/:\d{2}\s/,' ');

6
Bu işe yaramaz çünkü diğer diller tamamen farklı bir ayırıcı kullanabilir :.
Jon Koops

-2

İşte bunu yapacak bir işlev ve açıklayan yorumlar:

  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
  }

Diğerlerinin de belirttiği gibi, toLocaleTimeString () farklı tarayıcılarda farklı şekilde uygulanabildiğinden, bu şekilde daha iyi kontrol sağlar.

Javascript Date nesnesi hakkında daha fazla bilgi edinmek için bu iyi bir kaynaktır: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


-2

Bence orijinal soru şimdiye kadar gözden kaçan bir şeyle kolayca cevaplanabilir: basit bir dize bölünmüş. Döndürülen süre bir metin dizesidir, onu ":" sınırlayıcısına ayırın ve dizeyi istediğiniz gibi yeniden birleştirin. Eklenti yok, karmaşık komut dosyası yok. ve işte gidiyorsunuz:

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;
}

-3

Bu daha eski bir soru olsa da, son zamanlarda aynı soruyu yaşadım ve düzenli ifadeler ve dize değiştirme işlevini başka bir alternatif olarak kullanarak daha basit bir çözüm buldum (harici js kütüphanelerine veya ECMAScript İçselleştirme API'sine güvenmeye gerek yok) :

var d = new Date();
var localeTime = d.toLocaleTimeString();
var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " ");

Bu yaklaşım, dizenin: ss AM / PM ucunu almak için bir normal ifade kullanır ve: ss parçasını bir boşlukla değiştirir ve dizenin geri kalanına dokunulmaz. (Kelimenin tam anlamıyla "İki basamaklı bir sütun bulun ve ardından AM veya PM ile bir boşluk bulun ve iki nokta üst üste, iki basamak ve boşluk bölümünü yalnızca bir boşlukla değiştirin).

Bu ifade / yaklaşım yalnızca en-US ve en-US benzeri yerliler için geçerlidir. AM / PM kullanmayan İngiliz İngilizcesi (en-GB) ile de benzer bir sonuç istiyorsanız, farklı bir düzenli ifade gereklidir.

Orijinal sorucının örnek çıktısına dayanarak, öncelikle Amerikan izleyicileri ve en-ABD zaman şeması ile uğraştıklarını varsayıyorum.


-3

Tarihi bir dizeye dönüştürün ve ardından istediğiniz alt dizeleri birleştirin.

let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM

3
Lütfen gönderinize biraz açıklama ekleyin.
DigitCart

5
toLocaleTimeStringyerel ayarlara bağlı olarak her tarayıcıda farklı bir dize döndürür. Bu konumlara güvenemezsiniz, diğer kişilerin tarayıcılarında farklı, muhtemelen bozuk sonuçlar elde edersiniz.
oriadam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.