Luxon 초기 소개 (Moment 팀 날짜 다른 라 이브 러 리)

4528 단어 자바 script
저 는 Moment 의 깊이 있 는 사용자 가 아 닙 니 다. 다만 일상 에서 시간 포맷 에 대한 수요 가 있 을 뿐 입 니 다. 예전 에는 Moment 를 사 용 했 지만 Moment 의 mutable API 에 불편 함 을 느 꼈 습 니 다. 동료 가 Luxon 을 소 개 했 는데 그 안에 가 변 적 이지 않 은 데이터 스타일 로 디자인 된 API 를 사 용 했 기 때문에 해 보 겠 습 니 다. GitHub 에 별 이 많 으 니 안심 하고 드 세 요.https://github.com/moment/luxon
Luxon 은 Moment 프로젝트 의 한 관리자 가 개발 한 것 으로 그의 개인 적 인 생각 에 따라 개선 되 었 습 니 다. 가 변성 을 제외 하고 사용 하 는 도 구 를 업 데 이 트 했 고 시간 대 에 가서 더 좋 은 조정 을 시 도 했 습 니 다. 구체 적 으로 작가 의 원문 설명 을 봐 야 합 니 다.https://moment.github.io/luxo...
Luxon 과 Moment 의 차이 점.
문서 에 상세 한 설명 이 있 습 니 다.https://moment.github.io/luxo...가장 뚜렷 한 예 는 바로 불변성 (Immutability) 이다. 예 를 들 어 Moment 에서 시간 을 수정 하 는 것 이다.
var m1 = moment();
var m2 = m1.add(1, 'hours');
m1.valueOf() === m2.valueOf(); //=> true

원래 의 대상 은 수 정 됩 니 다. 그러나 Luxon 에서 오래된 대상 은 변 하지 않 습 니 다.
var d1 = DateTime.local();
var d2 = d1.plus({ hours: 1 });
d1.valueOf() === d2.valueOf(); //=> false

이렇게 하면 낡은 시간의 추이 에 근거 하여 새로운 시간 을 계산 할 때 낡은 데이터 가 의외로 수 정 될 까 봐 걱정 할 필요 가 없다.
API 스타일 에 도 적지 않 은 조정 이 있 습 니 다. 예 를 들 어 DateTime 라 는 대상 입 니 다. 전체적으로 Luxon 의 이름 이 상대 적 으로 수 다스 러 운 것 같 습 니 다. 아마도 더 정확 하기 위해 서 일 것 입 니 다.
좋 은 점 은 읽 기 m.year 가 Getter 인 터 페 이 스 를 사용 한 것 일 수도 있 습 니 다. 이것 은 좀 더 간단 합 니 다. 위의 링크 에 상세 한 설명 이 있 습 니 다.https://moment.github.io/luxo...
그리고 코드 의 부 피 를 봤 는데 더 커 보 였 어 요. 어차피 둘 다 큰 데..https://cdnjs.cloudflare.com/...https://moment.github.io/luxo...
참조 코드
Luxon 에 서 는 주로 DateTime 부터 호출 되 는데 플랫폼 에 따라 쓰기 가 다 르 기 때문에 주로 ES6 의 문법 인용 DateTime 대상 을 사용 합 니 다.
var DateTime = luxon.DateTime;
const { DateTime } = require('luxon');

import { DateTime } from 'luxon';

ClojureScript 에서 shadow - cljs 를 빌 렸 다 면 이렇게 쓸 수 있 습 니 다.
(ns app (:require ["luxon" :refer [DateTime]]))

(.log js/console (.local DateTime))

생 성 날짜 의 대상
Luxon 에 서 는 사용 하지 않 는 형식 에 대한 구분 이 필요 합 니 다.
DateTime.local() //    Date.now()
DateTime.fromISO(String)
DateTime.fromObject(Object) // fromJSDate(date: Date, options: Object): DateTime
DateTime.fromMillis(Number)
DateTime.fromJSDate(Date)

실제 호출 결과:
coffee> DateTime.local()
DateTime {
  ts: 2018-02-21T14:44:35.186+08:00,
  zone: Asia/Shanghai,
  locale: en-US }

coffee> date = new Date
2018-02-21T06:45:13.151Z

coffee> DateTime.fromJSDate(date)
DateTime {
  ts: 2018-02-21T14:45:13.151+08:00,
  zone: Asia/Shanghai,
  locale: en-US }

coffee> str = date.toISOString()
'2018-02-21T06:45:13.151Z'

coffee> DateTime.fromISO str
DateTime {
  ts: 2018-02-21T14:45:13.151+08:00,
  zone: Asia/Shanghai,
  locale: en-US }

좀 더 구체 적 인 용법 을 사용 하면 API 문 서 를 뒤 집 을 수 있 습 니 다.https://moment.github.io/luxo...
포맷 날짜
내 장 된 형식 은 별로 연구 하지 않 았 습 니 다. 업무 가 별로 필요 하지 않 아 보 입 니 다. 형식 을 제공 하 는 것 은 적지 않 지만,
dt.toISO();         //=> '2017-04-20T11:32:00.000-04:00'

날짜 의 포맷 은 dt.toFormat 방법 을 통 해 이 루어 집 니 다. 유사 m.format 하고 디 테 일 은 작은 차이 가 있 지만 문 서 를 참고 하여 쓰 십시오.https://moment.github.io/luxo...
DateTime.local().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes'

날짜 조작
문서 참조https://moment.github.io/luxo...
DateTime.local(2017, 2, 13).plus({ months: 1 }).toISODate() //=> '2017-03-13'
d1 < d2 // is d1 before d2?
d1.hasSame(d2, 'milllisecond'); // equivalent to `+d1 === +d2`
d1.hasSame(d2, 'minute');       // both DateTimes are in the same minute (and hour, day, month, etc)
d1.hasSame(d2, 'year');         // etc

Luxon 에 Duration 에 관 한 계산 이 있어 서 잘 모 르 겠 어 요. 제 가 직접 몇 가지 예 를 들 어 봤 는데...https://moment.github.io/luxo...
var dur = Duration.fromObject({ days: 3, hours: 6})
dur.as('minutes')       //=> 4680
var end = DateTime.fromISO('2017-03-13');
var start = DateTime.fromISO('2017-02-13');

var diffInMonths = end.diff(start, 'months');
diffInMonths.toObject(); //=> { months: 1 }

기타
나 는 또 하나의 기능 이 다 중 언어 라 고 생각 할 수 있다. 왜냐하면 Moment 에서 쉽게 사용 할 수 있 기 때문이다. 문 서 를 넘 기 면 넘 기지 않 고 운영 체제 API 를 통 해 다 중 언어 를 처리 하 는 설명 만 있 을 뿐 잘 모른다.https://moment.github.io/luxo...
시간 대 에 대해 서 는 Luxon 에서 직접 지원 을 해 주 셔 서 내용 이 많아 보이 지만 잘 모 르 겠 습 니 다.https://moment.github.io/luxo...

좋은 웹페이지 즐겨찾기