2017-12-14 25 views
0

현재 PM/AM 형식으로 밀리 초를 표시 할 때 다른 언어를 처리하고 이상한 동작을하는 프로젝트에서 작업하고 있습니다. 24 시간 형식으로 같은 날짜/시간 반면moment js는 AM/PM 이후 밀리 초를 표시합니다.

12/14/2017 3:45:45 PM.199 

다음과 같이 표시됩니다 : 나는 AM/PM 형식을 사용하여 밀리 초 정밀도와 날짜/시간 쌍을 표시하려면

나는 이런 식으로 뭔가를 얻을 수 :

12/14/2017 15:45:45.199 

이 같은 AM/PM 형식을 표시 할 수있는 방법이 있나요 :

12/14/2017 3:45:45.199 PM 

T 그는 사용자의 현지화 옵션에 따라 날짜/시간을 표시하지 않기 때문에 "L LTS"형식을 사용하고 있습니다.

var divEn = $('#divEn'); 
var divFi = $('#divFi'); 
var en = "en"; 
var pt = "pt"; 
var dateEn = moment().locale(en); 
var dateFi = moment().locale(pt); 
format = "L LTS.SSS"; 
divEn.text(dateEn.format(format)); 
divFi.text(dateFi.format(format)); 

답변

0

항상 12/14/2017 3:45:45.199 PM 사용처럼 대신 L LTS.SSSMM/DD/YYYY h:mm:ss.SSS Aformat 같은 토큰을 결과를 표시하려면

Here is a fiddle to illustrate the problem

. 달의 수에 대한

MM 스탠드, DDmm, h는 시간 (0..12)이며, YYYY는 연도, 월의 일입니다 분, 초 ss 스탠드, 분수 초와 대한 SSS 스탠드를 의미합니다 A은 AM/PM의 약자입니다.

LLTS은 현지화 된 토큰입니다 (출력은 지역에 따라 다릅니다).

편집 :

당신은 LTS 토큰은 AM/PM 토큰 (A 또는 a)이 포함되어있는 경우 다음 확인할 수 localeData()longDateFormat() 지역화 형식 토큰을 가서 사용하고 dinamically 형식을 변경할 수 있습니다. 여기

라이브 샘플 :

function getCustomLocalizedFormat(locale){ 
 
    var localeData = moment.localeData(locale); 
 
    var lts = localeData.longDateFormat('LTS'); 
 
    var format = "L LTS.SSS"; 
 
    if(lts.match(/a/i)){ 
 
    format = "L h:mm:ss.SSS A"; 
 
    } 
 
    return format; 
 
} 
 

 
var divEn = $('#divEn'); 
 
var divFi = $('#divFi'); 
 
var divRes = $('#divRes'); 
 
var en = "en"; 
 
var pt = "pt"; 
 
var dateEn = moment().locale(en); 
 
var dateFi = moment().locale(pt); 
 

 
var enLocaleData = moment.localeData('en'); 
 
var formatEn = getCustomLocalizedFormat('en'); 
 
var formatPt = getCustomLocalizedFormat('pt'); 
 

 
divEn.text(dateEn.format(formatEn)); 
 
divFi.text(dateFi.format(formatPt)); 
 
divRes.text(moment().format('MM/DD/YYYY h:mm:ss.SSS A'));
<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.19.4/moment-with-locales.min.js"></script> 
 

 
<p>English</p> 
 
<div id="divEn"></div> 
 
<p>Portuguese</p> 
 
<div id="divFi"></div> 
 
<p>General</p> 
 
<div id="divRes"></div>

가 있다는 점 유의 하시길 바랍니다 :

  • 이 접근 방식은 momentjs 지원하는 각 로케일에 대해 테스트되지 않습니다. pa-in (네팔) (펀잡), ml (말라얄람어), ne, hi (힌디어), gom-latn (콩 카니 라틴 스크립트) 및 다른 사람과 같은 로케일은 A로 시작하는 LTS 토큰을 가지고있다. 이러한 로케일에 대해 예상되는 출력이 무엇인지는 분명하지 않습니다.
  • updateLocale 기능과 longDateFormat 키를 사용하여 Long Date Formats을 사용자 정의 할 수 있습니다.

는 아마 가장 좋은 방법은 지원되는 로케일의 부분 집합을 정의하고 각 로케일에 대한 사용자 정의 형식을 정의하는 것입니다 (그리고/또는 단지 순간의 LTS 정의).

+0

답장을 보내 주셔서 감사합니다. 문제를 더 잘 설명하기 위해 질문을 편집했습니다. 내가 "L LTS"를 사용하는 이유는 사용자 언어 환경 설정에 따라 시간을 표시하기 위해서입니다. –

+0

답변을 업데이트했습니다. 각 지역에서 사용할 수있는 솔루션을 제공하는 것이 불가능하기 때문에 예상되는 결과를 정의하는 것이 중요합니다. – VincenzoC