2012-12-16 1 views
14

서버에서 18:00:00 형식의 문자열을 전송하고 있습니다. 이것은 날짜와 관계없이 시간 값입니다. Javascript에서 6:00PM로 변환하는 방법? 서버에서 보낸 값에 문자열로 오늘 날짜를 추가 한 다음 결합 된 값을 구문 분석 한 다음 Date 객체의 .toTimeString() 메서드를 시도 할 수 있지만 시간 메서드에서 발생하는 형식은 초 청크로 24 시간입니다. 함수를 작성할 수는 있지만 거기에 뭔가가 있습니까?Javascript : AM/PM 및 시간대 없음을 사용하여 24 시간 시각 문자열을 12 시간으로 변환합니다.

답변

39

아무것도를, 같은 것 내 솔루션은 다음과 같습니다

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.join (''); // return adjusted time or original string 
} 

tConvert ('18:00:00'); 

이 함수는 정규 표현식을 사용하여 시간 문자열의 유효성을 검사하고 구성 요소 부분으로 나눕니다. 시간의 초는 선택적으로 생략 될 수 있음에 유의하십시오. 유효한 시간이 표시되면 AM/PM 표시를 추가하고 시간을 조정하여 조정합니다.

반환 값은 유효한 시간이 제공된 경우 조정 된 시간 또는 원래 문자열입니다.

참조 jsFiddle : http://jsfiddle.net/ZDveb/

+0

"아무것도 내장"대답과 정규식을 사용하여 기능에 대한 감사합니다. – Tim

+0

@HBP 날짜가없는 경우에만 시간이 문자열에 있습니다. 12 시간 형식으로 24 시간 형식을 숨길 수있는 유일한 방법은 코드가 나를 위해 일한 것입니다. – skhurams

+0

번들은 "8 : 30,2 : 30,1 : 30 "등 –

15

AM/PM을 얻으려면 시간 부분이 12 미만인지 확인한 다음 AM이 아니면 AM이어야합니다.

시간을 얻으려면 (hour % 12) || 12을하십시오.

이 그것을 수행해야합니다

var timeString = "18:00:00"; 
var H = +timeString.substr(0, 2); 
var h = H % 12 || 12; 
var ampm = (H < 12 || H === 24) ? "AM" : "PM"; 
timeString = h + timeString.substr(2, 3) + ampm; 

http://jsfiddle.net/Skwt7/4/

오전 시간은 예를 들어, 08:00:00로 서식이 있다고 가정. 그들은 앞에 0이없이 포맷하는 경우, 당신은 첫 번째 콜론의 위치를 ​​테스트 할 것이다 : 내장

var hourEnd = timeString.indexOf(":"); 
var H = +timeString.substr(0, hourEnd); 
var h = H % 12 || 12; 
var ampm = (H < 12 || H === 24) ? "AM" : "PM"; 
timeString = h + timeString.substr(hourEnd, 3) + ampm; 

http://jsfiddle.net/Skwt7/3/

+0

substr을 사용하여 주셔서 감사합니다. HBP의 솔루션이 초 청크를 제거한 이후, 당신의 대답이 첫 번째인데도 녹색 체크를 할 것입니다. 게다가, 그는 3K에 불과합니다. 당신은 21K로 포인트를 굴리고 있습니다 :-) – Tim

+0

아. 아무 래도 나는 초를 제거하고 싶지 않았 음을 알았습니다. – gilly3

+0

12:30 PM – iamsaksham

3

솔루션을 이해하기 위해 열심히 여러 복잡한 건너 한이 같은 질문을 한 결과, 다음이 떠올랐다 : 하드에 의존하지 않는 매우 간단한 해결책이있다 읽은 정규식 또는 기타 복잡한 코드 당신이 적절한 형식으로 날짜 문자열을 얻을 것이다 가정

function timeTo12HrFormat(time) 
{ // Take a time in 24 hour format and format it in 12 hour format 
    var time_part_array = time.split(":"); 
    var ampm = 'AM'; 

    if (time_part_array[0] >= 12) { 
     ampm = 'PM'; 
    } 

    if (time_part_array[0] > 12) { 
     time_part_array[0] = time_part_array[0] - 12; 
    } 

    formatted_time = time_part_array[0] + ':' + time_part_array[1] + ':' + time_part_array[2] + ' ' + ampm; 

    return formatted_time; 
} 



var time = timeTo12HrFormat(18:00:00); 
console.log(time); // 6:00:00 PM 
0

, 나는 해결책을 가지고 : 뭔가 분명 실종 않는 한,이 매우 간단하고 이해하기 쉬운 솔루션입니다.

function parseDateTime(dt) { 
     var date = false; 
     if (dt) { 
      var c_date = new Date(dt); 
      var hrs = c_date.getHours(); 
      var min = c_date.getMinutes(); 
      if (isNaN(hrs) || isNaN(min) || c_date === "Invalid Date") { 
       return null; 
      } 
      var type = (hrs <= 12) ? " AM" : " PM"; 
      date = ((+hrs % 12) || hrs) + ":" + min + type; 
     } 
     return date; 
    } 

    parseDateTime("2016-11-21 12:39:08");//"12:39 AM" 
    parseDateTime("2017-11-21 23:39:08");//"11:39 PM" 
1

gilly3의 대답을 기반으로합니다. 변환 할 경우

:

08:00 to 08:00 AM 
16:00 to 04:00 PM 

다음이 작동합니다 :

function tConv24(time24) { 
    var ts = time24; 
    var H = +ts.substr(0, 2); 
    var h = (H % 12) || 12; 
    h = (h < 10)?("0"+h):h; // leading 0 at the left for 1 digit hours 
    var ampm = H < 12 ? " AM" : " PM"; 
    ts = h + ts.substr(2, 3) + ampm; 
    return ts; 
}; 

https://jsfiddle.net/fpjs9g0L/

0

내가 대신 복잡의 자바 스크립트 Date 객체 네이티브의 힘을 활용하는 것을 선호 정규 표현식과 유효성 검사가있는 것들. 또한 한 자리 숫자로 0을 추가하는 것이 가장 좋습니다. 나는 위에 언급 한대로 format-12h component으로 문제를 해결했습니다.

코드와 테스트 결과를 살펴볼 수 있습니다. 자유롭게 가져 와서 다음 예제와 같이 사용하십시오.

format12h(new Date(2017,06,04,10,45,10)) => 10:45 am 
format12h(new Date(2017,06,04,23,45,10)) => 11:45 pm 
format12h(new Date(2017,06,04,23,45,10), true) => 11:45:10 pm 
관련 문제