Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DenoのためのDateTimeライブラリPtera
Search
Takuro
August 18, 2021
Programming
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DenoのためのDateTimeライブラリPtera
https://yumenosora.connpass.com/event/220025/の発表資料
Takuro
August 18, 2021
More Decks by Takuro
See All by Takuro
RustのSchema_First_GraphQLライブラリrusty-gqlを作った話.pdf
tak_iwamoto
0
130
STORES予約を支えるフロントエンド技術
tak_iwamoto
2
4.8k
Other Decks in Programming
See All in Programming
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
160
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
150
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.3k
フィードバックで育てるAI開発
kotaminato
1
120
AIエージェントで 変わるAndroid開発環境
takahirom
2
710
GitHubCopilotCLIのスラッシュコマンドを自作してみる
htkym
0
100
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
8
3k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
180
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
400
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
330
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
500
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Skip the Path - Find Your Career Trail
mkilby
1
170
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
370
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
410
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Transcript
Deno の DateTime ライブラリ Ptera を作った話 Takuro Iwamoto
自己紹介 Takuro Iwamoto Software Engineer at STORES 予約 最近の興味は Deno
と Rust Twitter: @tak_rockbook
Ptera DateTime Library For Deno Fully written in Deno Inspired
By Day.js, Luxon and Moment.js import { datetime } from "https://deno.land/x/ptera/mod.ts"; // parse ISO 8601 datetime("2021-06-30T21:15:30.200"); // timezone datetime().toZonedTime("Asia/Tokyo"); // locale datetime().setLocale("fr");
Why does Ptera exist? Node.js の DateTime ライブラリも Deno で使用できる。
単純に Deno で何かライブラリを書いてみたかった! Day.js や Luxon のように独自のクラスを提供している Deno のライブラリはなかった。 deno_std/datetime に date-fns 的な Date クラスに対する utilities は存在している。 dayjs は Deno で使用する際に補完が効かない。 import dayjs from "https://cdn.skypack.dev/
[email protected]
"; import { DateTime } from "https://cdn.skypack.dev/luxon"; import { format } from "https://deno.land/x/date_fns/index.js"; const dayjsDate = dayjs(); const luxonDate = DateTime.now(); format(new Date(), "'Today is a' eeee");
datetime import { datetime } from "https://deno.land/x/ptera/mod.ts"; // now in
local time datetime(); datetime("2021-06-30T21:15:30.200"); // JavaScript Date datetime(new Date()); // Object datetime({ year: 2021, month: 3, day: 21 }); // Unixtime datetime(1625238137000); // Array datetime([2021, 6, 11, 13, 30, 30]);
Parse and Format const parsedDate = datetime().parse( "5/Aug/2021:14:15:30 +0900", "d/MMM/YYYY:HH:mm:ss
ZZ" ); // support locale datetime().parse("2021 лютий 03", "YYYY MMMM dd", { locale: "uk" }); // format to ISO 8601 const dt = datetime({ year: 2021, month: 7, day: 21, hour: 23, minute: 30, second: 59, }); dt.toISO(); // 2021-07-21T23:30:59.000Z dt.toISODate(); // 2021-07-21 dt.toISOWeekDateDate(); // 2021-W29-3 dt.toISOTime(); // 23:30:59.000 dt.format("YYYY/MMMM/dd"); // 2021/July/21 // support locale dt.setLocale("fr").format("YYYY/MMMM/dd"); // // 2021/juillet/21
Timezone and Intl Basic // Timezone const dt = datetime().toZonedTime("America/New_York");
dt.offsetHour(); // -4 dt.offsetMin(); // -240 const utc = dt.toUTC(); // Intl const dtFr = datetime("2021-07-03").setLocale("fr"); dtFr.toDateTimeFormat({ dateStyle: "full" }); // samedi 3 juillet 2021; datetime("2045-01-01").isBefore(); // false datetime("2045-01-01").isAfter(); // true datetime("2045-01-01").isAfter(datetime("2030-01-01")); // true datetime("2020-01-01").isLeapYear(); // true datetime("2021-13-01").isValid(); // false
Math import { diffInMillisec, latestDateTime, oldestDateTime, } from "https://deno.land/x/ptera/mod.ts"; const
dt1 = datetime("2021-08-21:13:30:00"); const dt2 = datetime("2021-01-30:21:30:00"); diffInMillisec(dt1, dt2); // 17510400000 const latest = datetime("2021-08-21"); const oldest = datetime("2021-01-30"); const middle = datetime("2021-04-30"); const datetimes = [latest, oldest, middle]; latestDateTime(datetimes); // latest oldestDateTime(datetimes); // oldest const dt = datetime("2021-08-21:13:30:00"); // { year: 2021, month: 8, day: 21, hour: 13, minute: 30, second: 0, millisecond: 0, } dt.add({ year: 1 }).substract({ month: 2 }); // { year: 2022, month: 6, day: 21, hour: 13, minute: 30, second: 0, millisecond: 0, }
今後について Temporal ECMAScript 標準の日付 API(2021 年 8 月現在、Stage3) Temporal API
が実装されれば Ptera を含めた、ラッパークラスを提供しているライブラリは不要になる? Temporal 版 date-fns のようなライブラリにできると面白そう const zonedDateTime = Temporal.ZonedDateTime.from({ timeZone: "America/Los_Angeles", year: 1995, month: 12, day: 7, }); const record = Temporal.Duration.from({ minutes: 26, seconds: 17, milliseconds: 530, });
Deno で日付を扱う際にぜひお試しください!