Menghitung waktu relatif di C#
Tertentu yang diberikan DateTime
nilai, bagaimana cara menampilkan waktu relatif, seperti:
- 2 jam yang lalu
- 3 hari yang lalu
- satu bulan lalu
1453
37
Tertentu yang diberikan DateTime
nilai, bagaimana cara menampilkan waktu relatif, seperti:
Jeff, kode bagus tapi bisa lebih jelas dengan konstanta (seperti yang disarankan dalam Kode Lengkap).
jquery.plugin timeago
Jeff, karena Stack Overflow menggunakan jQuery secara luas, saya merekomendasikan jquery.plugin timeago.
Manfaat:
Hanya pasangkan ke waktu pada DOM siap:
Ini akan mengubah semua
abbr
elemen dengan kelas timeago dan ISO 8601 timestamp dalam judul:menjadi sesuatu seperti ini:
yang menghasilkan: 4 bulan yang lalu. Seiring dengan berjalannya waktu, waktu akan secara otomatis memperbarui.
Disclaimer: saya menulis plugin ini, jadi saya'm bias.
Berikut ini's bagaimana saya melakukannya
Saya lebih suka versi ini untuk keringkasan, dan kemampuan untuk menambahkan di new tick poin. Ini bisa dikemas dengan
Terbaru()
perpanjangan untuk jangka Waktu yang bukan lama 1 kapal, tetapi untuk singkatnya di posting, ini yang akan dilakukan. Ini perbaikan satu jam yang lalu, 1 jam yang lalu, dengan menyediakan satu jam sampai 2 jam telah berlaluBerikut ulang dari Jeffs Script untuk PHP:
http://refactormycode.com/codes/493-twitter-esque-relative-dates
C# 6 versi:
Berikut ini's merupakan implementasi aku menambahkan sebagai metode penyuluhan ke DateTime kelas yang menangani investasi masa depan dan masa lalu tanggal dan menyediakan sebuah pendekatan pilihan yang memungkinkan anda untuk menentukan tingkat detail anda'kembali mencari ("3 jam yang lalu" lebih "3 jam, 23 menit, 12 detik yang lalu"):
Saya akan merekomendasikan komputasi ini pada sisi klien juga. Kurang kerja untuk server.
Berikut adalah versi yang saya gunakan (dari Zach Leatherman)
Ada juga paket yang disebut Humanizer pada Nuget dan itu benar-benar bekerja dengan sangat baik
Scott Hanselman memiliki langgan pada-nya blog
@jeff
IMHO anda tampaknya sedikit lama. Namun hal itu tampaknya sedikit lebih kuat dengan dukungan untuk "kemarin" dan "tahun". Tapi dalam pengalaman saya ketika ini digunakan orang adalah yang paling mungkin untuk melihat konten dalam 30 hari pertama. Hal ini hanya benar-benar hardcore orang-orang yang datang setelah itu. Jadi itulah sebabnya saya biasanya memilih untuk tetap pendek dan sederhana.
Ini adalah metode yang saya gunakan saat ini pada salah satu website saya. Ini hanya mengembalikan relatif hari, jam, waktu. Dan kemudian pengguna telah menampar pada "lalu" dalam output.
Beberapa tahun terlambat ke pesta, tapi aku punya syarat untuk melakukan ini untuk masa lalu dan masa depan tanggal, jadi aku dikombinasikan [Jeff][1]'s dan [Vincent's][2] dalam hal ini. It's ternarytastic extravaganza! :)
Apakah ada cara mudah untuk melakukan hal ini di pulau Jawa? The
jawa.util.Tanggal
kelas tampaknya agak terbatas.Di sini saya cepat dan kotor solusi Java:
iPhone Objective-C Versi
Mengingat dunia dan suaminya muncul untuk posting kode sampel, di sini adalah apa yang saya tulis beberapa waktu yang lalu, didasarkan pada beberapa jawaban-jawaban ini.
Saya memiliki kebutuhan khusus untuk kode ini menjadi localisable. Jadi saya memiliki dua kelas —
Tata
, yang menentukan localisable syarat, danFuzzyDateExtensions
, yang memegang banyak metode ekstensi. Saya tidak perlu berurusan dengan masa depan datetimes, sehingga tidak ada upaya dilakukan untuk menangani mereka dengan kode ini.I've meninggalkan beberapa XMLdoc di sumber, tapi dihapus sebagian besar (di mana mereka'd jelas) untuk singkatnya's sake. I've juga tidak termasuk setiap anggota kelas yang berikut ini:
The
FuzzyDateString
kelas berisi:Salah satu hal penting yang saya ingin capai, serta lokalisasi, adalah bahwa "hari ini" hanya akan berarti "ini hari kalender", sehingga
Adalah
,IsThisMonth
,IsThisYear
metode terlihat seperti ini:dan pembulatan metode seperti ini (saya've termasuk
RoundedMonths
, seperti yang's sedikit berbeda):Saya berharap orang-orang menemukan ini berguna dan/atau menarik :o)
menggunakan Fasih DateTime
Di PHP, saya melakukannya dengan cara ini:
Saya pikir saya'a memberikan suntikan ini menggunakan kelas-kelas dan polimorfisme. Saya punya sebelumnya iterasi yang digunakan sub-klasifikasi yang akhirnya memiliki terlalu banyak overhead. I've beralih ke yang lebih fleksibel delegasi / properti publik model objek yang lebih baik secara signifikan. Kode saya ini sangat sedikit yang lebih akurat, saya berharap saya bisa datang dengan cara yang lebih baik untuk menghasilkan "bulan yang lalu" yang't tampak terlalu over-engineered.
Saya pikir saya'd masih tetap dengan Jeff's jika-maka cascade karena itu's kode kurang dan itu's sederhana (it's pasti lebih mudah untuk memastikan itu'll bekerja seperti yang diharapkan).
Untuk kode di bawah ini PrintRelativeTime.GetRelativeTimeMessage(Waktu lalu) kembali dalam waktu relatif pesan (misalnya "kemarin").
anda dapat mencoba ini.Saya pikir itu akan bekerja dengan benar.
Ketika anda tahu penampil's zona waktu, itu mungkin lebih jelas untuk menggunakan hari kalender pada skala hari. I'm tidak akrab dengan .NET perpustakaan, jadi saya don't tahu bagaimana anda'd lakukan itu di C#, sayangnya.
Konsumen situs, anda juga bisa tangan-wavier di bawah satu menit. "Kurang dari satu menit yang lalu" atau "sekarang," bisa cukup baik.
Sama seperti jawaban lain untuk pertanyaan ini tapi sebagai perpanjangan dengan metode statis kamus.