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
Agentic UI
manfredsteyer
PRO
0
200
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
dRuby over BLE
makicamel
2
390
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
Creating Composable Callables in Contemporary C++
rollbear
0
170
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Lessons from Spec-Driven Development
simas
PRO
0
220
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
0
130
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
160
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.5k
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Raft: Consensus for Rubyists
vanstee
141
7.6k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
260
The Curious Case for Waylosing
cassininazir
1
400
Facilitating Awesome Meetings
lara
57
7k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
740
エンジニアに許された特別な時間の終わり
watany
107
250k
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 で日付を扱う際にぜひお試しください!