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
140
STORES予約を支えるフロントエンド技術
tak_iwamoto
2
4.8k
Other Decks in Programming
See All in Programming
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
400
AIが無かった頃の素敵な出会いの話
codmoninc
1
430
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
720
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.5k
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
150
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
120
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
3
980
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
180
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
200
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1.1k
How to build a perfect <img>
jonoalderson
1
5.9k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
Embracing the Ebb and Flow
colly
88
5.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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 で日付を扱う際にぜひお試しください!