सेकंड प्रदर्शित किए बिना मैं .toLocaleTimeString () का उपयोग कैसे करूं?


162

मैं वर्तमान में सेकंड प्रदर्शित किए बिना उपयोगकर्ता का समय प्रदर्शित करने का प्रयास कर रहा हूं। वहाँ एक तरीका है मैं जावास्क्रिप्ट का उपयोग कर ऐसा कर सकता है .toLocaleTimeString ()?

कुछ इस तरह से करना:

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

प्रत्येक इकाई के साथ उपयोगकर्ता का समय प्रदर्शित करेगा, उदाहरण के लिए वर्तमान में यह 3:39:15 बजे प्रदर्शित होता है। क्या मैं उसी स्ट्रिंग को प्रदर्शित कर पा रहा हूं, बस सेकंड के बिना? (उदाहरण 3:39 PM)

जवाबों:


316

आप हमेशा विकल्पों को सेट कर सकते हैं, इस पृष्ठ के आधार पर आप सेट कर सकते हैं, सेकंड से छुटकारा पाने के लिए, कुछ इस तरह से

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

फ़ायरफ़ॉक्स, क्रोम, IE9 + और ओपेरा द्वारा समर्थित है। इसे अपने वेब ब्राउज़र कंसोल पर आज़माएँ।


2
धन्यवाद, मैं इस उत्तर के लिए घंटों खोज रहा था।
मुस्तफा

5
FYI करें hour: "2-digit"मेरे लिए क्रोम 42 में काम नहीं कर रहा है और न ही FF 37 --- दोनों में d = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})रिटर्न "6:15 AM"
user9645

16
[]एक विशिष्ट स्थान छोड़ने के लिए उपयोग करें। इस तरह से आप यूजर्स के पास toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
रहेंगे

12
51 में काम करता है:new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
rofrol

1
हाँ, जब से मैंने इसे यहाँ पोस्ट किया है, 4 साल हो गए हैं, इसलिए बहुत सी चीजें बदल गई हैं। कोई आश्चर्य नहीं कि अब आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है। सादर
CJLopez

10

यह मेरे लिए काम करता है:

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

6
यह ध्यान देने योग्य है कि, मार्च 2020 तक, टाइमस्टाइल विकल्प केवल क्रोम और ओपेरा में समर्थित है , और फ़ायरफ़ॉक्स, एज / आईई और सफारी में नहीं। यदि आप व्यापक कवरेज चाहते हैं, तो संभवतः अब के लिए घंटे और मिनट के विकल्प के साथ रहना बेहतर है।
बकथोर्न

सफारी / आईओएस के लिए, यह केवल अमेरिका में काम करता है जहां आपके पास एएम / पीएम है। en-US 3:16 PM पर प्रदर्शित होगा, अन्य स्थान 15:16:00 प्रदर्शित होंगे।
पासिट

8

दिनांक.prototype.toLocaleString द्वारा दिया गया मान कार्यान्वयन पर निर्भर है, इसलिए आपको वह मिलता है जो आपको मिलता है। आप सेकंड को हटाने के लिए स्ट्रिंग को पार्स करने की कोशिश कर सकते हैं, लेकिन यह अलग-अलग ब्राउज़रों में भिन्न हो सकता है, इसलिए आपको उपयोग में प्रत्येक ब्राउज़र के लिए भत्ता बनाने की आवश्यकता होगी।

अपनी खुद की, स्पष्ट प्रारूप बनाना दिनांक विधियों का उपयोग करना मुश्किल नहीं है। उदाहरण के लिए:

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
लानत समय से लौटे स्ट्रिंग को पार्स न करें। मैं बिना किसी समस्या के कुछ वर्षों से था। लेकिन फिर आज मैंने देखा कि यह काम नहीं कर रहा था। यह पता चलता है कि विशेष यूनिकोड वर्ण हैं (उदाहरण 0x200E, बाएँ से दाएँ चिह्न) जो Date.parse द्वारा संसाधित नहीं किया जा सकता है। कभी नहीं देखा कि आ रहा है। इसलिए मैं सभी स्थानीय कार्यों का उपयोग बंद करने जा रहा हूं, और बस अपने समय-स्वरूपित तारों का निर्माण करूंगा। जो मुझे इस तरह से बुरे आश्चर्य से बचाएगा।
गाबे हल्समर

@ GabeHalsmer-मैं नहीं करते हैं, और कभी नहीं, (उदाहरण के लिए अंतिम अनुच्छेद पार्स तार करने के लिए अनुमति देता है Date.parse की सिफारिश यहाँ )। लेकिन यह यहाँ अप्रासंगिक है, इसका ज़िक्र बिलकुल नहीं है, अगर आपको लगता है कि आपको इसका उत्तर गलत लगा है (जैसे " आप पार्स करने की कोशिश कर सकते हैं ...")।
रॉबिन

अच्छा लिंक। इसलिए सारांश में लोगों को या तो अपना स्वयं का पार्स या अपनी स्वयं की ToString विधि बनानी चाहिए, क्योंकि मूल रूप से Date.prototype.toLocalString और Date.parse असंगत हैं। ToString बनाना मेरे लिए सबसे आसान काम लगता था। लेकिन आपने लागू किया है कि आप स्वयं के पार्स हैं। इसलिए या तो लोगों के लिए काम करेंगे। आवश्यक बात जो मैं सभी को अवगत कराना चाहता था, वह यह थी कि Date.parse, toLocaleString के साथ काम नहीं करता है। और मुझे इस असंगतता का पता लगाने में घंटों लग गए क्योंकि यह कितना सूक्ष्म था। Visual Studio के डीबगर में बाएँ से दाएँ चिह्न अदृश्य होते हैं।
गाबे हल्समर

कूल, एक और पूरी तरह से गुमराह वोट नीचे। कोई आश्चर्य नहीं कि लोग उनके नाम नहीं रखना चाहते हैं।
रॉब

अन्य प्रारूपों के लिए तारीखों के भंडारण और परिवहन के लिए, toISOString और getTime शायद reparsing के लिए सबसे सुरक्षित तारीख प्रारूप प्रदान करते हैं। मैं पिछले दशक में किसी भी जेएस कार्यान्वयन के बारे में नहीं जानता, यूटीसी के मिलीसेकंड संस्करण को गेटटाइम से लौटाया नहीं गया है और आईएसओ मान भी लूज टाइम के लिए पार्सबल दिनांक प्रारूप के रूप में ऐनक में हैं। लेकिन UI तत्वों से कभी भी बैक डेट न पढ़ें। जो आपके ऐप लेयर से आना चाहिए। और हमेशा सफारी में परीक्षण करें। वे दिनांक ऑब्जेक्ट के बारे में IE6-स्तरीय झटके हैं।
एरिक रेपेन


0

मैं भी इस समस्या के समाधान के लिए देख रहा हूँ, यहाँ मैं आखिरकार आया क्या है:

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 संस्करण पर देखा है (यह यूनिकोड बाएं से दाएं चिह्न है)।

मुझे लगता है कि अगर स्वरूपित समय में "XX: XX: XX" जैसा कुछ होता है, तो यह सेकंड के साथ समय होना चाहिए और मैं पिछले भाग को हटा देता हूं, अगर मुझे यह पैटर्न नहीं मिलता है, तो कुछ भी नहीं बदला जाता है। बहुत सुरक्षित है, लेकिन कुछ अजीब परिस्थितियों में सेकंड छोड़ने का जोखिम है।

मैं सिर्फ यह आशा करता हूं कि कोई ऐसा लोकेल नहीं है जो स्वरूपित समय भागों के क्रम को बदल दे (जैसे इसे ss: mm: hh) बनाते हैं। यह बाएं से दाएं निशान मुझे इस बारे में थोड़ा परेशान कर रहा है, इसीलिए मैं दाएं-से-बाएं निशान (\ u202E) को नहीं हटाता हूं - मैं इस मामले में मैच नहीं ढूंढना पसंद करता हूं और छोड़ देता हूं समय ऐसे मामलों में सेकंड के साथ स्वरूपित होता है।


1
+1 आप केवल वही हैं , जिन्होंने प्रश्न का उत्तर सही दिया है। धन्यवाद दोस्त
mate64

1
यह toLocaleTimeString()उन सभी धारणाओं के बारे में बहुत कुछ बताता है जो सभी स्थानों के लिए सही नहीं हो सकते हैं।
एजे रिचर्डसन

0

आप यह कोशिश कर सकते हैं, जो मेरी जरूरतों के लिए काम कर रहा है।

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

या

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

6
यह काम नहीं करेगा क्योंकि अन्य भाषाओं की तुलना में एक पूरी तरह से अलग विभाजक का उपयोग कर सकते हैं :
जॉन कोप्स 28/16

-2

यहां एक फ़ंक्शन है जो इसे करेगा, टिप्पणियों के साथ जो समझाएगा:

  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 () को अलग-अलग ब्राउज़रों में अलग-अलग तरीके से लागू किया जा सकता है, यह तरीका बेहतर नियंत्रण देता है।

जावास्क्रिप्ट दिनांक ऑब्जेक्ट के बारे में अधिक जानने के लिए, यह एक अच्छा संसाधन है: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


-2

मुझे लगता है कि मूल प्रश्न का उत्तर आसानी से अब तक अनदेखी की जा रही चीज़ के साथ दिया जा सकता है: एक साधारण स्ट्रिंग विभाजन। वापस किया जा रहा समय एक पाठ स्ट्रिंग है, बस इसे "" पर विभाजित करें: सीमांकक और स्ट्रिंग को जिस तरह से आप चाहते हैं उसे पुन: इकट्ठा करें। कोई प्लग इन, कोई जटिल स्क्रिप्टिंग नहीं। और यहाँ फिर जाओ:

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

हालांकि यह एक पुराना सवाल है, मैंने हाल ही में खुद एक ही था, और नियमित अभिव्यक्तियों का उपयोग करके अधिक सरल समाधान के साथ आया था और स्ट्रिंग एक अन्य विकल्प के रूप में कार्य को प्रतिस्थापित करता है (बाहरी जेएस पुस्तकालयों की कोई आवश्यकता नहीं है या ईसीएमएस्क्रिप्ट इंटर्नाइजेशन एपीआई पर निर्भरता है) :

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

यह एप्रोच स्ट्रिंग के एएम / पीएम सिरे को हटाने के लिए रेगेक्स लुक-फॉरवर्ड का उपयोग करता है और रीप्लेस करता है: एसएस का हिस्सा एक स्पेस के साथ होता है, बाकी स्ट्रिंग को वापस लौटाता है। (शाब्दिक रूप से कहते हैं "दो अंकों के साथ एक बृहदान्त्र खोजें और एक स्थान जो एएम या पीएम द्वारा पीछा किया जाता है और बृहदान्त्र, दो अंक और केवल एक स्थान के साथ अंतरिक्ष भाग को प्रतिस्थापित करता है)।

यह अभिव्यक्ति / दृष्टिकोण केवल एन-यूएस और एन-यूएस-जैसे लोकेल्स के लिए काम करता है। यदि आप ब्रिटिश इंग्लिश (एन-जीबी) के साथ भी ऐसा ही परिणाम चाहते हैं, जो एएम / पीएम का उपयोग नहीं करता है, तो एक अलग नियमित अभिव्यक्ति की आवश्यकता है।

मूल प्रश्नकर्ता के नमूना आउटपुट के आधार पर, मुझे लगता है कि वे मुख्य रूप से अमेरिकी दर्शकों और एन-यूएस टाइम स्कीमा के साथ काम कर रहे थे।


-3

बस तारीख को एक स्ट्रिंग में परिवर्तित करें, और उसके बाद आप जो सब्सट्रेटिंग चाहते हैं उसे संक्षिप्त करें।

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

3
कृपया अपनी पोस्ट में कुछ स्पष्टीकरण जोड़ें।
डिजिटकार्ट

5
toLocaleTimeStringस्थानीय सेटिंग्स के आधार पर हर ब्राउज़र पर अलग स्ट्रिंग देता है। आप इन पदों पर भरोसा नहीं कर सकते, आप अन्य लोगों के ब्राउज़रों पर अलग-अलग, शायद टूटे हुए परिणाम प्राप्त करेंगे।
ओरिदम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.