초를 표시하지 않고 .toLocaleTimeString ()을 어떻게 사용합니까?


163

현재 초를 표시하지 않고 사용자 시간을 표시하려고합니다. Javascript의 .toLocaleTimeString ()을 사용 하여이 작업을 수행 할 수있는 방법이 있습니까?

이런 식으로 뭔가를 :

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

모든 단위에 대해 사용자의 시간을 표시합니다 (예 : 현재 3:39:15 PM). 초없이 동일한 문자열을 표시 할 수 있습니까? (예 : 오후 3:39)

답변:


317

당신은 당신이 설정할 수있는 이 페이지 를 기반으로 옵션을 설정할 수 있습니다.

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

Firefox, Chrome, IE9 + 및 Opera에서 지원됩니다. 웹 브라우저 콘솔에서 사용해보십시오.


2
고마워, 나는이 답변에 대한 시간을 찾고있었습니다.
MustafaP

5
참고로 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'}
Hafenkranich

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 년 3 월 현재 timeStyle 옵션은 Chrome, Opera에서만 지원되며 Firefox, Edge / IE 및 Safari에서는 지원 되지 않습니다. 넓은 범위를 원한다면 현재 시간 및 분 옵션을 사용하는 것이 좋습니다.
buckthorn

Safari / iOS의 경우 AM / PM이있는 미국에서만 작동합니다. en-US는 오후 3:16을 표시하고 다른 로케일은 15:16:00을 표시합니다.
PassKit

8

Date.prototype.toLocaleString 에 의해 반환되는 값 은 구현에 따라 달라 지므로 얻을 수있는 것을 얻습니다. 문자열을 구문 분석하여 초를 제거하려고 시도 할 수 있지만 브라우저마다 다를 수 있으므로 사용중인 모든 브라우저에 대해 허용해야합니다.

Date 메서드를 사용하여 자신 만의 명확한 형식을 만드는 것은 어렵지 않습니다. 예를 들면 다음과 같습니다.

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에서 리턴 된 문자열을 구문 분석하지 마십시오. 나는 몇 년 동안 아무런 문제없이 있었다. 그러나 오늘 나는 그것이 작동하지 않는 것을 알았습니다. Date.parse로 처리 할 수없는 특수 유니 코드 문자 (예 : 0x200E, 왼쪽에서 오른쪽으로 표시)가 있습니다. 오는 것을 보지 못했습니다. 모든 로케일 함수 사용을 중단하고 시간 형식 문자열을 직접 작성하겠습니다. 그것은이 같은 악한 놀라움에서 나를 구할 것입니다.
Gabe Halsmer

@ GabeHalsmer-I는하지 않으며, 결코, 구문 분석 문자열에 다음 Date.parse을 허용 (예 : 마지막 단락 추천 여기를 ). 그러나 그것은 여기에 관련이 없습니다. 그것은 전혀 언급되지 않았습니다. 만약 당신이 생각한다면 대답을 이해하지 못하고 있습니다 (예를 들어 " 당신 은 파싱을 시도 할 있습니다…").
RobG

좋은 링크. 따라서 기본적으로 Date.prototype.toLocalString 및 Date.parse가 호환되지 않기 때문에 사람들은 자체 구문 분석 또는 자체 ToString 메소드를 작성해야합니다. ToString을 만드는 것이 가장 쉬운 것처럼 보였습니다. 그러나 당신은 당신 자신의 파싱을 구현했습니다. 그래서 사람들을 위해 일할 것입니다. 내가 모두에게 알리고 싶었던 것은 Date.parse가 toLocaleString과 작동하지 않는다는 것입니다. 미묘한 관계로 인해이 비 호환성을 추적하는 데 몇 시간이 걸렸습니다. Visual Studio의 디버거에서는 왼쪽에서 오른쪽으로 표시가 보이지 않습니다.
Gabe Halsmer 2016 년

쿨, 또 다른 완전히 다운 투표 투표. 사람들이 자신의 이름을 붙이고 싶지 않은 것도 당연합니다.
RobG

날짜를 다른 형식으로 저장 및 전송하기 위해 toISOString 및 getTime은 아마도 가장 안전한 날짜 형식을 제공하여 재분석 할 수 있습니다. 지난 10 년 동안 getTime에서 반환 된 밀리 초 버전의 UTC를 처리하지 않는 JS 구현을 알지 못했으며 ISO 값도 loooonnng 시간 동안 구문 분석 가능한 날짜 형식으로 지정되었습니다. 그러나 UI 요소에서 날짜를 다시 읽지 마십시오. 앱 계층에서 가져와야합니다. 그리고 항상 Safari에서 테스트하십시오. 그들은 날짜 객체에 대해 IE6 수준의 저크였습니다.
Erik Reppen


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()모든 로케일에 해당되지 않는 리턴 에 대해 많은 가정을 합니다.
AJ Richardson

0

당신은 이것을 시도 할 수 있습니다.

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

또는

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

6
다른 언어는와 완전히 다른 구분 기호를 사용할 수 있기 때문에 작동하지 않습니다 :.
Jon Koops

-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 ()은 다른 브라우저에서 다르게 구현 될 수 있으므로이 방법으로 더 나은 제어를 제공합니다.

Javascript Date 객체에 대한 자세한 내용은 다음 리소스를 참조하십시오 . 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

이것은 오래된 질문이지만 최근에 같은 질문을 받았으며 정규 표현식과 문자열 대체 기능을 다른 대안으로 사용하는보다 간단한 솔루션을 찾았습니다 (외부 js 라이브러리가 필요하지 않거나 ECMAScript 내부화 API에 의존하지 않음) :

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

이 접근법은 정규 표현식 미리보기를 사용하여 문자열의 : ss AM / PM 끝을 잡고 : ss 부분을 공백으로 바꾸고 나머지 문자열은 그대로 유지합니다. (문자 그대로 "두 자리 숫자와 공백이있는 콜론을 찾은 다음 AM 또는 PM 뒤에 콜론, 두 자리 숫자 및 공백 부분을 공백으로 바꿉니다).

이 표현 / 접근법은 en-US 및 en-US와 유사한 로케일에서만 작동합니다. AM / PM을 사용하지 않는 영국 영어 (en-GB)와 비슷한 결과를 원한다면 다른 정규식이 필요합니다.

원래 질문자의 샘플 결과를 바탕으로 나는 주로 미국 관객과 en-US 시간 스키마를 다루고 있다고 가정합니다.


-3

날짜를 문자열로 변환 한 다음 원하는 하위 문자열을 연결하십시오.

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

3
게시물에 설명을 추가하십시오.
DigitCart

5
toLocaleTimeString로캘 설정에 따라 모든 브라우저에서 다른 문자열을 반환합니다. 이 위치에 의존 할 수 없으며, 다른 사람의 브라우저에서 다른 결과가 나올 수 있습니다.
oriadam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.