0

내가 나에게 이런 마이크로 소프트의 형식으로 JSON 응답에 날짜를 제공 호출하고 서비스를 기반으로 포맷 된 날짜에 JSON 날짜 서식 그것을 처리하고 자바 스크립트에서 현지 날짜 시간으로 올바르게 변환하는 방법.
나는 그것이 제 1 차 문제는 날짜에, 지정된 문자열 형식을 통해 이상 변환하려고하는는 로케일

en-US locale "MM/DD/yyyy HH:mm:ss a" -> 3/24/2016 3:59:00 PM 
en-GB locale "DD/MM/yyyy HH:mm:ss" -> 24/03/2016 15:59:00 

의 경우 예를 들어 포맷하고 싶습니다. 나는 이것을 사용하여 해결했고 작동하는 것처럼 보이지만 그것을하는 가장 좋은 방법인지 확신 할 수 없다.

var jsDate = new Date(parseInt(jsonDate.substr(6))); 

국제화 API를 사용하여 서식을 수행하는 데 사용할 수있는 날짜 개체를 출력합니다. 나는 다음 날짜 생산하기 위해 때때로 (나중에) 올바른 로케일을 사용할 수 있습니다 형식은하지만, 출력에 있지만 여분의 쉼표로 거의가

var jsDate = new Date(parseInt(jsonDate.substr(6))); 
var locale = window.navigator.userLanguage || window.navigator.language; 
jsDate.toLocaleString(locale); //3/24/2016 3:59:00 PM or 24/03/2016, 15:59:00 

을 I는 쉼표를 제거하는 경우 현지화를 기반으로 작동하지 않는 형식을 수행하거나 수행하는 데 다소 호사 스럽습니다.

두 번째 문제는 로케일을 구할 수있는 확실한 방법이 있습니까? userLanguage 또는 언어로 검색하려고했지만 IE에서 사용되는 browserLanguage도 있다는 것을 깨달았습니다. 위의

var locale = window.navigator.userLanguage || window.navigator.language; 

는 여러 언어 언어 및 입력 설정에서 설정 한 경우 목록의 마지막 하나를 끌어 때문에 크롬, 예를 들어 보인다 일치하지 완전한 증거 때의 첫 번째에 크롬 기본값 목록과 다른 브라우저가 어떻게 그것을 처리할지 모르겠다.

나는 moment.min.js 및 moment-with-locales.min.js를 포함하여 시도한 momentjs를 사용하기 위해 다른 곳을 읽었습니다. 그러나 그것도 작동하지 않았다 :

var jsDate = new Date(parseInt(jsonDate.substr(6))); 
var locale = window.navigator.userLanguage || window.navigator.language; 
moment.locale(locale); 
var newDate = moment(jsDate).format("L LTS") //03/24/2016 3:59:00 PM but does not change base on locale so it remains MM/DD/YYYY ... even though I changed locale 

나는 이것에 관해 momentjs에 게시 된 이슈를 보았지만 더 오래되었다. https://github.com/moment/moment/issues/1044

어리석은 뭔가가 누락되었거나 더 좋은 방법이 있는지 확실하지 않습니다. 감사합니다

답변

0

순간을 사용하여 moment(String)을 사용하여 입력을 구문 분석 할 수 있습니다.

그런 다음 locale() 기능을 사용하여 순간 로캘을 설정할 수 있으므로 format("L LTS")을 사용하여 현지화 된 날짜와 시간을 표시 할 수 있습니다.

먼저 로케일을 변경해야합니다. 그런 다음 순간 개체를 만들어야합니다. 여기

en-gben-us 로케일에 대한 샘플 코드 :

var input = "\/Date(1458845940000)\/"; 
 

 
function changeLang(value){ 
 
    moment.locale(value); 
 
    var res = moment(input).format("L LTS"); 
 
    $("#result").html(res); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script> 
 

 
<select onchange="changeLang(value)"> 
 
    <option value="en">en</option> 
 
    <option value="en-gb">en-gb</option> 
 
    <option value="en-us">en-us</option> 
 
</select> 
 

 
<div id="result"></div>

+0

나는 거의 위의 동일한 코드 구현하지만 일부 내가 흐린 약이 제공하는 로케일을 감지하는 방법이었다 생각이 설정하는 순간까지? 그것은 내 두 번째 문제입니다. – Lumpy

+0

@Lumpy는 한 번에 여러 개의 다른 질문을하지 않도록 노력합니다. 브라우저 로케일을 얻는 방법을 알고 싶다면 이미 비슷한 질문이 많이 있습니다 (예 : [here] (http://stackoverflow.com/q/1043339/4131048).) 코드 샘플에 다음과 같이 명시했습니다. MM/DD/YYYY_를 유지하기 위해 로케일에서베이스를 변경하십시오. 그래서 나는 momentjs를 사용하여 작업 샘플로이 응답을 보냈습니다. – VincenzoC