Pertanyaannya adalah bagaimana memformat JavaScript Date
sebagai string yang menyatakan waktu yang berlalu mirip dengan cara Anda melihat waktu yang ditampilkan pada Stack Overflow.
misalnya
- 1 menit yang lalu
- 1 jam yang lalu
- 1 hari yang lalu
- 1 bulan lalu
- 1 tahun yang lalu
javascript
date-formatting
Sky Sanders
sumber
sumber
Intl.RelativeTimeFormat.prototype.format()
.Jawaban:
sumber
Mungkin berlebihan dalam hal ini, tetapi jika kesempatan menunjukkan moment.js hanya luar biasa!
Moment.js adalah pustaka datavascript javascript, untuk menggunakannya untuk skenario seperti itu, Anda harus:
http://momentjs.com/docs/#/displaying/fromnow/
Tambahan 2018 : Luxon adalah perpustakaan modern baru dan mungkin layak untuk dilihat!
sumber
Saya belum memeriksa (walaupun tidak sulit untuk), tapi saya pikir situs Stack Exchange menggunakan
jquery.timeago
plugin untuk membuat string waktu ini .Cukup mudah untuk menggunakan plugin, dan itu bersih dan diperbarui secara otomatis.
Berikut contoh cepat (dari beranda plugin):
sumber
Ini akan menunjukkan kepada Anda format waktu lampau dan sebelumnya seperti '2 hari yang lalu' '10 menit dari sekarang' dan Anda dapat meneruskannya baik objek Date, cap waktu numerik atau string tanggal
sumber
return time;
denganformat = time_formats[time_formats.length - 1]; return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
untuk mengembalikan berabad-abad untuk rentang waktu yang besar, bukan milidetik.Berikut ini adalah sedikit modifikasi pada solusi Sky Sander yang memungkinkan tanggal untuk dimasukkan sebagai string dan mampu menampilkan rentang seperti "1 menit" dan bukannya "73 detik"
sumber
interval = Math.floor(seconds / 60);
. Saya menambahkaninterval = seconds;
ke finalelse
dan berfungsi dengan baik.let seconds = Math.floor((+new Date() - date) / 1000);
interval === 0
di yang terakhirif
?Anda mungkin ingin melihat humanized_time_span: https://github.com/layam/js_humanized_time_span
Ini kerangka agnostik dan sepenuhnya dapat disesuaikan.
Cukup unduh / sertakan skrip lalu Anda dapat melakukan ini:
atau bahkan ini:
Baca dokumen untuk info lebih lanjut.
sumber
NaN years ago
mengapa ??humanized_time_span("2011/05/11 12:00:00")
Mengubah fungsi di atas menjadi
Kalau tidak, itu akan menunjukkan hal-hal seperti "75 menit" (antara 1 dan 2 jam). Itu juga sekarang mengasumsikan tanggal input adalah cap waktu Unix.
sumber
Banyak kode yang kompatibel dan dapat dibaca lintas peramban:
Seperti yang diberikan oleh @Travis
sumber
Versi yang lebih pendek seperti yang digunakan oleh Lokely :
sumber
Infinity seconds ago
dari sekarang, unix timestamp param,
sumber
Versi ES6 dari kode yang disediakan oleh @ user1012181
Diedit dengan saran @ ibe-vanmeenen. (Terima kasih!)
sumber
Versi sederhana dan mudah dibaca:
sumber
Saya menulis satu dengan js dan python, digunakan dalam dua proyek, sangat bagus dan sederhana: perpustakaan sederhana (kurang dari 2kb) digunakan untuk memformat tanggal dengan
*** time ago
pernyataan.sederhana, kecil, mudah digunakan, dan teruji dengan baik.
npm install timeago.js
import timeago from 'timeago.js'; // or use script tag
gunakan api
format
.Sampel:
Anda juga dapat membuat secara real-time.
sumber
import { format, render, cancel, register } from 'timeago.js';
Meskipun pertanyaannya sudah lama ditanyakan, menulis jawaban ini dengan harapan itu akan membantu seseorang.
Lewati tanggal Anda ingin mulai menghitung. Menggunakan
moment().fromNow()
dari momentjs : (Lihat informasi lebih lanjut di sini )Jika Anda ingin mengubah informasi yang diberikan untuk tanggal dari Sekarang Anda menulis waktu relatif khusus Anda untuk saat ini.
Misalnya, dalam kasus saya sendiri saya ingin mencetak
'one month ago'
alih-alih'a month ago'
( disediakan saat (d) .dari Sekarang () ). Dalam hal ini, Anda dapat menulis sesuatu yang diberikan di bawah ini.CATATAN : Saya menulis kode untuk proyek di Agular 6
sumber
Dapat juga menggunakan plugin relativeTime dayjs untuk menyelesaikan ini.
sumber
Ini harus menangani stempel waktu yang valid dengan benar, termasuk Date.now (), unit tunggal, dan tanggal mendatang. Saya keluar berbulan-bulan, tetapi itu harus mudah ditambahkan. Saya mencoba membuatnya tetap bisa dibaca.
sumber
Saya telah memodifikasi versi Sky Sanders. Operasi Math.floor (...) dievaluasi di blok if
sumber
return days + "1 day ago";
seharusnyareturn "1 day ago";
sumber
sumber
Solusi saya ..
sumber
Tusukan saya berdasarkan jawaban lain.
sumber
Saya mencari jawaban untuk ini dan hampir mengimplementasikan salah satu solusi ini, tetapi seorang rekan mengingatkan saya untuk memeriksa
react-intl
perpustakaan karena kami sudah menggunakannya.Jadi menambahkan solusi ... jika Anda menggunakan
react-intl
perpustakaan, mereka memiliki<FormattedRelative>
komponen untuk ini.https://github.com/yahoo/react-intl/wiki/Components#formattedrelative
sumber
Inilah yang saya lakukan (objek mengembalikan satuan waktu beserta nilainya):
sumber