11# react-native-date
22
3- ::: warning Beta
4- This library is in beta (v0.1.0). APIs may change. [ Report issues on GitHub] ( https://github.com/bbernag/react-native-date/issues ) .
5- :::
6-
7- The fastest date library for React Native. Native C++ performance with zero-config localization.
3+ The fastest date library for React Native. Powered by C++ and [ Nitro Modules] ( https://nitro.margelo.com/ ) with zero-config localization.
84
95## Is this library for you?
106
@@ -56,51 +52,51 @@ Built with C++ and [Nitro Modules](https://nitro.margelo.com/) for synchronous,
5652
5753<table class =" benchmark-table " >
5854<thead >
59- <tr ><th >Operation</th ><th >Native </th ><th >date-fns</th ><th >Day.js</th ><th >Luxon</th ></tr >
55+ <tr ><th >Operation</th ><th >NativeDate </th ><th >date-fns</th ><th >Day.js</th ><th >Luxon</th ></tr >
6056</thead >
6157<tbody >
62- <tr ><td ><code >now()</code ></td ><td class =" winner " >445K <span class =" speed-badge low " >1.6x </span ></td ><td >278K</td ><td >214K</td ><td >139K</td ></tr >
63- <tr ><td ><code >parse()</code ></td ><td class =" winner " >2.0M <span class =" speed-badge extreme " >21x </span ></td ><td >94K</td ><td >329K</td ><td >28K</td ></tr >
58+ <tr ><td ><code >now()</code ></td ><td class =" winner " >445K <span class =" speed-badge medium " >3.2x </span ></td ><td >278K</td ><td >214K</td ><td >139K</td ></tr >
59+ <tr ><td ><code >parse()</code ></td ><td class =" winner " >2.0M <span class =" speed-badge extreme " >71x </span ></td ><td >94K</td ><td >329K</td ><td >28K</td ></tr >
6460<tr ><td ><code >format()</code ></td ><td class =" winner " >771K <span class =" speed-badge extreme " >25x</span ></td ><td >31K</td ><td >103K</td ><td >34K</td ></tr >
65- <tr ><td ><code >addDays()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge medium " >2.8x </span ></td ><td >612K</td ><td >68K</td ><td >26K</td ></tr >
61+ <tr ><td ><code >addDays()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge extreme " >65x </span ></td ><td >612K</td ><td >68K</td ><td >26K</td ></tr >
6662<tr ><td ><code >addMonths()</code ></td ><td >279K</td ><td class =" winner " >400K <span class =" speed-badge low " >1.4x</span ></td ><td >32K</td ><td >26K</td ></tr >
67- <tr ><td ><code >diffInDays()</code ></td ><td class =" winner " >1.6M <span class =" speed-badge extreme " >22x </span ></td ><td >74K</td ><td >104K</td ><td >8K</td ></tr >
68- <tr ><td ><code >startOfDay()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge medium " >2.5x </span ></td ><td >727K</td ><td >136K</td ><td >58K</td ></tr >
69- <tr ><td ><code >endOfDay()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge medium " >2.5x </span ></td ><td >727K</td ><td >136K</td ><td >11K</td ></tr >
70- <tr ><td ><code >isWeekend()</code ></td ><td class =" winner " >2.1M <span class =" speed-badge medium " >3.0x </span ></td ><td >711K</td ><td >383K</td ><td >134K</td ></tr >
71- <tr ><td ><code >isLeapYear()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge medium " >2.6x </span ></td ><td >693K</td ><td >400K</td ><td >202K</td ></tr >
63+ <tr ><td ><code >diffInDays()</code ></td ><td class =" winner " >1.6M <span class =" speed-badge extreme " >200x </span ></td ><td >74K</td ><td >104K</td ><td >8K</td ></tr >
64+ <tr ><td ><code >startOfDay()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge extreme " >31x </span ></td ><td >727K</td ><td >136K</td ><td >58K</td ></tr >
65+ <tr ><td ><code >endOfDay()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge extreme " >164x </span ></td ><td >727K</td ><td >136K</td ><td >11K</td ></tr >
66+ <tr ><td ><code >isWeekend()</code ></td ><td class =" winner " >2.1M <span class =" speed-badge extreme " >16x </span ></td ><td >711K</td ><td >383K</td ><td >134K</td ></tr >
67+ <tr ><td ><code >isLeapYear()</code ></td ><td class =" winner " >1.8M <span class =" speed-badge high " >8.9x </span ></td ><td >693K</td ><td >400K</td ><td >202K</td ></tr >
7268<tr ><td ><code >getComponents()</code ></td ><td class =" winner " >673K <span class =" speed-badge high " >4.6x</span ></td ><td >147K</td ><td >296K</td ><td >180K</td ></tr >
73- <tr ><td ><code >addHours()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge high " >4.1x </span ></td ><td >414K</td ><td >158K</td ><td >26K</td ></tr >
74- <tr ><td ><code >addMinutes()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge medium " >2.6x </span ></td ><td >642K</td ><td >158K</td ><td >26K</td ></tr >
75- <tr ><td ><code >addSeconds()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge medium " >3.7x </span ></td ><td >456K</td ><td >159K</td ><td >26K</td ></tr >
69+ <tr ><td ><code >addHours()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge extreme " >65x </span ></td ><td >414K</td ><td >158K</td ><td >26K</td ></tr >
70+ <tr ><td ><code >addMinutes()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge extreme " >65x </span ></td ><td >642K</td ><td >158K</td ><td >26K</td ></tr >
71+ <tr ><td ><code >addSeconds()</code ></td ><td class =" winner " >1.7M <span class =" speed-badge extreme " >65x </span ></td ><td >456K</td ><td >159K</td ><td >26K</td ></tr >
7672<tr ><td ><code >formatUTC()</code ></td ><td class =" winner " >805K <span class =" speed-badge extreme " >45x</span ></td ><td >18K</td ><td >80K</td ><td >29K</td ></tr >
77- <tr ><td ><code >formatInTZ()</code ></td ><td class =" winner " >400K <span class =" speed-badge extreme " >21x </span ></td ><td >19K</td ><td >15K</td ><td >23K</td ></tr >
73+ <tr ><td ><code >formatInTZ()</code ></td ><td class =" winner " >400K <span class =" speed-badge extreme " >27x </span ></td ><td >19K</td ><td >15K</td ><td >23K</td ></tr >
7874</tbody >
7975</table >
8076
8177#### Low-End Android Device (ops/sec - higher is better)
8278
8379<table class =" benchmark-table " >
8480<thead >
85- <tr ><th >Operation</th ><th >Native </th ><th >date-fns</th ><th >Day.js</th ><th >Luxon</th ></tr >
81+ <tr ><th >Operation</th ><th >NativeDate </th ><th >date-fns</th ><th >Day.js</th ><th >Luxon</th ></tr >
8682</thead >
8783<tbody >
88- <tr ><td ><code >now()</code ></td ><td class =" winner " >530K <span class =" speed-badge medium " >3.3x </span ></td ><td >162K</td ><td >76K</td ><td >32K</td ></tr >
89- <tr ><td ><code >parse()</code ></td ><td class =" winner " >465K <span class =" speed-badge extreme " >35x </span ></td ><td >13K</td ><td >46K</td ><td >4K</td ></tr >
84+ <tr ><td ><code >now()</code ></td ><td class =" winner " >530K <span class =" speed-badge extreme " >17x </span ></td ><td >162K</td ><td >76K</td ><td >32K</td ></tr >
85+ <tr ><td ><code >parse()</code ></td ><td class =" winner " >465K <span class =" speed-badge extreme " >116x </span ></td ><td >13K</td ><td >46K</td ><td >4K</td ></tr >
9086<tr ><td ><code >format()</code ></td ><td class =" winner " >270K <span class =" speed-badge extreme " >54x</span ></td ><td >5K</td ><td >16K</td ><td >5K</td ></tr >
91- <tr ><td ><code >addDays()</code ></td ><td class =" winner " >378K <span class =" speed-badge medium " >3.5x </span ></td ><td >107K</td ><td >10K</td ><td >4K</td ></tr >
92- <tr ><td ><code >addMonths()</code ></td ><td class =" winner " >80K <span class =" speed-badge low " >1.2x </span ></td ><td >69K</td ><td >5K</td ><td >4K</td ></tr >
93- <tr ><td ><code >diffInDays()</code ></td ><td class =" winner " >351K <span class =" speed-badge extreme " >27x </span ></td ><td >13K</td ><td >15K</td ><td >1K</td ></tr >
94- <tr ><td ><code >startOfDay()</code ></td ><td class =" winner " >392K <span class =" speed-badge medium " >3.0x </span ></td ><td >130K</td ><td >20K</td ><td >8K</td ></tr >
95- <tr ><td ><code >endOfDay()</code ></td ><td class =" winner " >396K <span class =" speed-badge medium " >3.1x </span ></td ><td >129K</td ><td >20K</td ><td >2K</td ></tr >
96- <tr ><td ><code >isWeekend()</code ></td ><td class =" winner " >445K <span class =" speed-badge medium " >3.5x </span ></td ><td >128K</td ><td >59K</td ><td >19K</td ></tr >
97- <tr ><td ><code >isLeapYear()</code ></td ><td class =" winner " >419K <span class =" speed-badge medium " >3.3x </span ></td ><td >125K</td ><td >70K</td ><td >29K</td ></tr >
98- <tr ><td ><code >getComponents()</code ></td ><td class =" winner " >141K <span class =" speed-badge high " >5.5x </span ></td ><td >25K</td ><td >47K</td ><td >27K</td ></tr >
99- <tr ><td ><code >addHours()</code ></td ><td class =" winner " >367K <span class =" speed-badge high " >4.9x </span ></td ><td >75K</td ><td >24K</td ><td >4K</td ></tr >
100- <tr ><td ><code >addMinutes()</code ></td ><td class =" winner " >377K <span class =" speed-badge medium " >3.3x </span ></td ><td >113K</td ><td >23K</td ><td >4K</td ></tr >
101- <tr ><td ><code >addSeconds()</code ></td ><td class =" winner " >376K <span class =" speed-badge high " >4.6x </span ></td ><td >81K</td ><td >23K</td ><td >4K</td ></tr >
87+ <tr ><td ><code >addDays()</code ></td ><td class =" winner " >378K <span class =" speed-badge extreme " >95x </span ></td ><td >107K</td ><td >10K</td ><td >4K</td ></tr >
88+ <tr ><td ><code >addMonths()</code ></td ><td class =" winner " >80K <span class =" speed-badge extreme " >20x </span ></td ><td >69K</td ><td >5K</td ><td >4K</td ></tr >
89+ <tr ><td ><code >diffInDays()</code ></td ><td class =" winner " >351K <span class =" speed-badge extreme " >351x </span ></td ><td >13K</td ><td >15K</td ><td >1K</td ></tr >
90+ <tr ><td ><code >startOfDay()</code ></td ><td class =" winner " >392K <span class =" speed-badge extreme " >49x </span ></td ><td >130K</td ><td >20K</td ><td >8K</td ></tr >
91+ <tr ><td ><code >endOfDay()</code ></td ><td class =" winner " >396K <span class =" speed-badge extreme " >198x </span ></td ><td >129K</td ><td >20K</td ><td >2K</td ></tr >
92+ <tr ><td ><code >isWeekend()</code ></td ><td class =" winner " >445K <span class =" speed-badge extreme " >23x </span ></td ><td >128K</td ><td >59K</td ><td >19K</td ></tr >
93+ <tr ><td ><code >isLeapYear()</code ></td ><td class =" winner " >419K <span class =" speed-badge extreme " >14x </span ></td ><td >125K</td ><td >70K</td ><td >29K</td ></tr >
94+ <tr ><td ><code >getComponents()</code ></td ><td class =" winner " >141K <span class =" speed-badge high " >5.6x </span ></td ><td >25K</td ><td >47K</td ><td >27K</td ></tr >
95+ <tr ><td ><code >addHours()</code ></td ><td class =" winner " >367K <span class =" speed-badge extreme " >92x </span ></td ><td >75K</td ><td >24K</td ><td >4K</td ></tr >
96+ <tr ><td ><code >addMinutes()</code ></td ><td class =" winner " >377K <span class =" speed-badge extreme " >94x </span ></td ><td >113K</td ><td >23K</td ><td >4K</td ></tr >
97+ <tr ><td ><code >addSeconds()</code ></td ><td class =" winner " >376K <span class =" speed-badge extreme " >94x </span ></td ><td >81K</td ><td >23K</td ><td >4K</td ></tr >
10298<tr ><td ><code >formatUTC()</code ></td ><td class =" winner " >292K <span class =" speed-badge extreme " >146x</span ></td ><td >2K</td ><td >12K</td ><td >4K</td ></tr >
103- <tr ><td ><code >formatInTZ()</code ></td ><td class =" winner " >38K <span class =" speed-badge extreme " >19x </span ></td ><td >2K</td ><td >169</td ><td >973</td ></tr >
99+ <tr ><td ><code >formatInTZ()</code ></td ><td class =" winner " >38K <span class =" speed-badge extreme " >225x </span ></td ><td >2K</td ><td >169</td ><td >973</td ></tr >
104100</tbody >
105101</table >
106102
@@ -134,6 +130,25 @@ import { nativeDate } from '@bernagl/react-native-date';
134130nativeDate ().addDays (7 ).format (' yyyy-MM-dd' );
135131```
136132
133+ ### Tree-Shakeable
134+
135+ The library is fully tree-shakeable. Only import what you need:
136+
137+ ``` typescript
138+ // Only these functions are included in your bundle
139+ import { format , addDays } from ' @bernagl/react-native-date' ;
140+ ```
141+
142+ For optimal bundle size, the chainable API can be imported separately:
143+
144+ ``` typescript
145+ // Functional API only (smaller bundle)
146+ import { format , addDays } from ' @bernagl/react-native-date' ;
147+
148+ // Chainable API (explicit import)
149+ import { nativeDate } from ' @bernagl/react-native-date/chain' ;
150+ ```
151+
137152---
138153
139154## Features
@@ -143,6 +158,7 @@ nativeDate().addDays(7).format('yyyy-MM-dd');
143158- ** 150+ locales** - Every locale supported by iOS/Android
144159- ** Timezone support** - Full IANA timezone database from the OS
145160- ** Tiny footprint** - No locale bundles, minimal JS
161+ - ** Tree-shakeable** - Only bundle what you use
146162- ** Type-safe** - Full TypeScript support
147163- ** Two API styles** - Functional or chainable
148164
0 commit comments