shoelace/docs/components/relative-time.md

108 wiersze
4.2 KiB
Markdown
Czysty Zwykły widok Historia

2020-11-11 22:31:53 +00:00
# Relative Time
[component-header:sl-relative-time]
2020-11-20 22:02:38 +00:00
Outputs a localized time phrase relative to the current date and time.
2020-11-11 22:31:53 +00:00
2020-11-20 22:02:38 +00:00
Localization is handled by the browser's [`Intl.RelativeTimeFormat` API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat). No language packs are required.
2020-11-11 22:31:53 +00:00
```html preview
2020-11-20 22:02:38 +00:00
<!-- Shoelace 2 release date 🎉 -->
2020-11-25 21:19:00 +00:00
<sl-relative-time date="2020-07-15T09:17:00-04:00"></sl-relative-time>
2020-11-11 22:31:53 +00:00
```
2021-11-04 22:12:47 +00:00
```jsx react
import { SlRelativeTime } from '@shoelace-style/shoelace/dist/react';
2022-03-02 15:10:41 +00:00
const App = () => <SlRelativeTime date="2020-07-15T09:17:00-04:00" />;
2021-11-04 22:12:47 +00:00
```
2021-07-08 21:41:10 +00:00
The `date` attribute determines when the date/time is calculated from. It must be a string that [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) can interpret or a [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object set via JavaScript.
2020-11-11 22:31:53 +00:00
2020-11-25 21:19:00 +00:00
?> When using strings, avoid ambiguous dates such as `03/04/2020` which can be interpreted as March 4 or April 3 depending on the user's browser and locale. Instead, always use a valid [ISO 8601 date time string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Date_Time_String_Format) to ensure the date will be parsed properly by all clients.
!> The `Intl.RelativeTimeFormat` API is available [in all major browsers](https://caniuse.com/mdn-javascript_builtins_intl_relativetimeformat), but it only became available to Safari in version 14. If you need to support Safari 13, you'll need to [use a polyfill](https://github.com/catamphetamine/relative-time-format).
2020-11-11 22:31:53 +00:00
## Examples
### Keeping Time in Sync
2020-11-20 22:02:38 +00:00
Use the `sync` attribute to update the displayed value automatically as time passes.
2020-11-11 22:31:53 +00:00
```html preview
<div class="relative-time-sync">
<sl-relative-time sync></sl-relative-time>
</div>
<script>
const container = document.querySelector('.relative-time-sync');
const relativeTime = container.querySelector('sl-relative-time');
2020-11-20 22:02:38 +00:00
relativeTime.date = new Date(new Date().getTime() - 60000);
2020-11-11 22:31:53 +00:00
</script>
```
2021-11-04 22:12:47 +00:00
```jsx react
import { SlRelativeTime } from '@shoelace-style/shoelace/dist/react';
const date = new Date(new Date().getTime() - 60000);
2022-03-02 15:10:41 +00:00
const App = () => <SlRelativeTime date={date} sync />;
2021-11-04 22:12:47 +00:00
```
2020-11-11 22:31:53 +00:00
### Formatting Styles
2020-11-20 22:02:38 +00:00
You can change how the time is displayed using the `format` attribute. Note that some locales may display the same values for `narrow` and `short` formats.
2020-11-11 22:31:53 +00:00
```html preview
2022-03-02 15:10:41 +00:00
<sl-relative-time date="2020-07-15T09:17:00-04:00" format="narrow"></sl-relative-time><br />
<sl-relative-time date="2020-07-15T09:17:00-04:00" format="short"></sl-relative-time><br />
2020-11-20 22:02:38 +00:00
<sl-relative-time date="2020-07-15T09:17:00-04:00" format="long"></sl-relative-time>
2020-11-11 22:31:53 +00:00
```
2021-11-04 22:12:47 +00:00
```jsx react
import { SlRelativeTime } from '@shoelace-style/shoelace/dist/react';
const App = () => (
<>
2022-03-02 15:10:41 +00:00
<SlRelativeTime date="2020-07-15T09:17:00-04:00" format="narrow" />
<br />
<SlRelativeTime date="2020-07-15T09:17:00-04:00" format="short" />
<br />
2021-11-04 22:12:47 +00:00
<SlRelativeTime date="2020-07-15T09:17:00-04:00" format="long" />
</>
);
```
2020-11-11 22:31:53 +00:00
### Localization
2021-12-02 15:29:04 +00:00
Use the `lang` attribute to set the desired locale.
2020-11-11 22:31:53 +00:00
```html preview
2022-03-02 15:10:41 +00:00
English: <sl-relative-time date="2020-07-15T09:17:00-04:00" lang="en-US"></sl-relative-time><br />
Chinese: <sl-relative-time date="2020-07-15T09:17:00-04:00" lang="zh-CN"></sl-relative-time><br />
German: <sl-relative-time date="2020-07-15T09:17:00-04:00" lang="de"></sl-relative-time><br />
Greek: <sl-relative-time date="2020-07-15T09:17:00-04:00" lang="el"></sl-relative-time><br />
2021-12-02 15:29:04 +00:00
Russian: <sl-relative-time date="2020-07-15T09:17:00-04:00" lang="ru"></sl-relative-time>
2020-11-11 22:31:53 +00:00
```
2021-11-04 22:12:47 +00:00
```jsx react
import { SlRelativeTime } from '@shoelace-style/shoelace/dist/react';
const App = () => (
<>
2022-03-02 15:10:41 +00:00
English: <SlRelativeTime date="2020-07-15T09:17:00-04:00" lang="en-US" />
<br />
Chinese: <SlRelativeTime date="2020-07-15T09:17:00-04:00" lang="zh-CN" />
<br />
German: <SlRelativeTime date="2020-07-15T09:17:00-04:00" lang="de" />
<br />
Greek: <SlRelativeTime date="2020-07-15T09:17:00-04:00" lang="el" />
<br />
2021-12-02 15:29:04 +00:00
Russian: <SlRelativeTime date="2020-07-15T09:17:00-04:00" lang="ru" />
2021-11-04 22:12:47 +00:00
</>
);
```
2020-11-11 22:31:53 +00:00
[component-metadata:sl-relative-time]