2013-07-26 4 views
25

코드없이 날짜없이 시간을 구문 분석하고 조작해야합니다. 예를 들어 나는 timepicker에서 문자열 "15:00"을 얻을 수 있습니다. 이것을 어떤 종류의 Time 객체로 바꾸고 싶습니다. 저는 보통 Python에서 Date, Time 및 Datetime 객체가 뚜렷하게 작동합니다.Javascript 구문 분석 날짜가없는 시간

그러나 내가 본 모든 솔루션은 Date 객체 사용에 초점을 맞추고 있습니다. 이것은 "15:00"과 같은 문자열을 구문 분석 할 수 없으므로 요일 정보가 필요합니다. 임의의 날짜 정보를 Times에 추가하고 싶지 않습니다. 특히 Date가 일과 로캘에 따라 일광 절약 시간과 같은 것에 대한 가정을하는 것처럼 보이고 시간이 자동으로 시간으로 변환 될 위험이있는 것으로 보입니다 주어진 로케일. 또한 시간을 추가 할 수 있기를 원합니다. "15:00 + 1 시간"

날짜와 관련이없는 "원시"시간을 구문 분석하고 처리하는 데 권장되는 솔루션은 무엇입니까?

+0

코드를 직접 작성하지 않으려면 [Moment.js] (http://momentjs.com) 또는 [Date.js] (http://www.datejs.com)가 필요합니다. . – Pointy

+0

나는 너 자신을 위해 필요한 몇 줄을 쓰는 것을 권하고 싶다. 일정상의 우려가 없기 때문에 간단합니다. –

+0

그게 내가 피하기를 바랬던 것입니다. Moment.js와 Date.js는 모두 Times가 아닌 DateTimes에 초점을 맞추므로 임의의 Date 정보를 Time에 붙이기 만하면 사용할 수 있습니다. 구현하는 것이 근본적으로 복잡하지 않다는 것을 상상할 수 있지만, 이미 존재하지 않는 것이 놀랍습니다. – mangecoeur

답변

13

불행히도 훌륭한 해결책은 없습니다. 자바 스크립트는 Date 객체를 가지고 있으며, 실제로는 날짜 + 시간이기 때문에 잘못 명명 된 것입니다. 당신이 더 깊이 생각 할 수 있습니다

한 가지 - 당신은 당신이 유일한 시간 작업하고 싶은 말은,하지만 당신은 시간의 일을 의미합니까 또는 시간의 기간을 의미합니까? 이것들은 관련이 있지만 약간 다른 개념입니다.

예를 들어, "15:00 + 1 시간"과 같은 작업을 원할 수도 있습니다. 음, 분명히 16 시가 될 것입니다. 그러나 "15:00 + 10 시간"은 어떨까요? 기간에 대해 이야기하는 경우 25 시가 되겠지만 시간대에 대해 이야기하는 경우에는 01 시가 될 수 있습니다.

실제로는 이 아닌이 01:00이 될 수 있습니다. 왜냐하면 모든 요일에 24 시간이있는 것은 아니기 때문입니다. 어떤 시간대와 DST가 해당 날에 시작 또는 중지하는지 여부에 따라 23 일, 23.5 일, 24.5 시간 또는 25 시간이있는 경우도 있습니다. 따라서 시간대 상황에서 을 수행하면은 계산에 특정 날짜와 영역을 포함하려고합니다. 물론, 24 시간 연속으로 이야기하고 있다면이 시점은 부적합합니다.

는 약 기간을 이야기하는 경우 - 당신은 아닌 moment 객체에서, moment.js 다시 볼 수도 있습니다. 거기에 또 다른 객체 인 moment.duration이 있습니다. 참조 번호는 here입니다.

마지막으로 일반 자바 스크립트를 사용하여 시간 문자열에서 시간과 분을 숫자로 구문 분석하는 것이 좋습니다. 필요에 따라 숫자를 조작 한 다음 문자열을 다시 출력하십시오. 그러나 귀하의 질문은 귀하가 관리하는 것을 찾고있는 것처럼 보입니다.

+0

불행히도 나는 지속 시간보다는 오히려 "시간의 시간"을 찾고 있습니다 (그래서 moment.js가 나옵니다). 관리되는 솔루션이없는 것처럼 보이고 정규식 문자열 구문 분석을 사용해야합니다. 이는 잘 테스트 된 라이브러리에서 처리하는 것이 바람직한 미묘한 버그가 발생하기 쉬운 일종의 까다로운 항목이기 때문에 수치 스럽습니다. – mangecoeur

+0

그 날을 특정 날에 배치 할 수 있다면 '날짜'또는 '순간'은 여전히 ​​좋은 생각입니다. 레스토랑을 항상 열어 놓는 경우 (예 : 매주 식당이 열리는 시간과 같이) 엣지 케이스는 훨씬 어려워집니다. 나는 이것을 위해 좋은 js 라이브러리를 모른다. 죄송합니다. –

14

나는 이미 내 응용 프로그램에 moment을 사용하여 이후 다음을 사용하여 종료 :

var str = '15:16:33'; 
var d = new moment(str, 'HH:mm:ss'); 

당신이 사용할 수있는 다른 형식의 문자열을 Moment String+Format docs를 참조하십시오.

29

여기에 12 또는 24 시간 시간에 대한 moment.js 솔루션입니다 :

moment('7:00 am', ['h:m a', 'H:m']); // Wed Dec 30 2015 07:00:00 GMT-0600 (CST) 
moment('17:00', ['h:m a', 'H:m']); // Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 
moment('17:00 am', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 
moment('17:00 pm', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 

http://momentjs.com/docs/#/parsing/string-formats/

+2

나는 하루 종일 이것을 찾고있다 –

+0

와우 ... 이것이 바로 그 것이다! 기본적으로 시간의 날짜는 내 (그리고 아마도 OP의) 유스 케이스에는 중요하지 않습니다. 유효한 timejs 객체로 시간 문자열을 변환하기 만하면됩니다. 그리고 웹상의 다른 모든 게시물들이 그러한 "불행"과 "불가능한"hehe에 대해 이야기했다고 생각합니다. 고맙습니다!! –

1

내가 프로젝트에 대한 최근에이 일을했지만, 정말 일부러 순간을 포함해야합니다.JS, 내가 사용하는 방법은 수동으로 같은 시간을 구문 분석하는 것이었다 : 대체 선발로

function parseTime(time) {  
    let timeInt = parseInt(time); 
    let minutes = time.substring(3,5); 

    // you could then add or subtract time here as needed 

    if(time > '12:00') { 
     return `${timeInt - 12}:${minutes} PM`; 
    } else { 
     return `${timeInt}:${minutes} AM`; 
    } 
} 

사용 이것은 당신이 순간을 사용하지 않으려면. 이 예제는 es6 구문을 사용합니다.