2017-11-15 12 views
0

여러 클라이언트가 있으므로 여러 시간대가 있습니다. API에서 일부 날짜를 가져 오는 중이며이 문자열에있는 날짜/시간은 정확하게 표시해야합니다. 나는 이것을 연구하고 잠시 파고 있었지만 여전히 명확한 대답을 찾지 못했습니다. 오는 문자열과 같은 포맷 :시간대를 오프셋하지 않고 JS Date 객체의 시간을 추출하십시오.

"2017-12-29T20:00:00" 

내가 꿔 것은 (어떤 시간대가 상쇄되지 뷰어 위치에 관계없이)하지만 나는 두 개의 문자열로 그대로 날짜와 시간을 추출하는 것입니다 그렇게하는 데 몇 가지 문제가 있습니다. 또한 올바른 형식으로 서식을 지정하기를 기대합니다. 예 :

"M/d/yyyy" 
"hh:mm AM/PM" (12 hour) 

나는이 전투를 위해 다양한 방법을 시도하고, 단지 문자열을 잡고 싶어 정말하지 않습니다,하지만 절반 그렇게 안넘어했습니다. 어떤 도움을 주셔서 감사합니다.

+0

momentjs 사용을 고려 했습니까? moment.format()은 쉬운 작업입니다. 그렇지 않으면 나는 오히려 자바 스크립트 getHour, getMinute, 등의 기능을 내장하여 빌드하려고 시도하는 것보다 하위 문자열을 가져오고 싶습니다. – cstricklan

+0

@cstricklan - 이것을 moment.format()에 넣었 으면 자동으로 시간대를 상쇄합니까? 또는 문자열에 제공된 시간/날짜를 유지합니까? – dlimes

+0

문자열 ""2017-12-29T20 : 00 : 00 "'에는 표준 시간대 정보가 없습니다. 예,'moment ("2017-12-29T20 : 00 : 00")를 호출하면 현지 시간대의 20:00에 순간 객체가 생성되지만 format() 함수가 문자열을 만드는 데 사용하는 영역이기도합니다. 그것은 10:00 PM에 머무를 것입니다. – cstricklan

답변

0
단지 문자열을 포맷, 그것은 파서에 내장 시간대에 모든 문제를 피할 고려

:

function reformatTimestamp(s) { 
 
    function z(n){return (n<10?'0':'')+ +n} 
 
    var b = s.split(/\D/); 
 
    var h = b[3]%12 || 12; 
 
    var ap = b[3] < 12? 'AM':'PM'; 
 
    return b[1] + '/' + b[2] + '/' + b[0] + 
 
     ' ' + z(h) + ':' + z(b[4]) + ' ' + ap; 
 
} 
 

 
console.log(reformatTimestamp('2017-12-29T20:00:00')) // 12/29/2017 08:00 PM

나는 월과 일을 앞에 오는 0으로 채우는 것이 더 좋을 것이라고 생각한다. (그러나 나는 특별한 m/d/y보다 DD-MMM-YYYY와 같은 명확한 날짜 형식을 사용한다.)

0

사용이 코드 :

function formatAMPM(date) { 
 
    var hours = date.getUTCHours(); 
 
    var minutes = date.getUTCMinutes(); 
 
    var ampm = hours >= 12 ? 'PM' : 'AM'; 
 
    hours = hours % 12; 
 
    hours = hours ? hours : 12; // the hour '0' should be '12' 
 
    minutes = minutes < 10 ? '0'+minutes : minutes; 
 
    var strTime = hours + ':' + minutes + ' ' + ampm; 
 
    return strTime; 
 
} 
 

 
var str = "2017-12-29T20:00:00"; 
 
var dt = new Date(str + "Z"); 
 
console.log("M/d/yyyy"); 
 
console.log((dt.getUTCMonth() + 1) + '/' + dt.getUTCDate() + '/' + dt.getUTCFullYear()); 
 
console.log("hh:mm AM/PM"); 
 
console.log(formatAMPM(dt));

+0

@RobG 네 말이 맞아. 나는 options1 줄을 적절히 삭제했다. :) –