Mai mult
Calcula timp relativ în C#
Având un specific DateTime
de valoare, cum pot afișa timp relativ, cum ar fi:
- 2 ore în urmă
- 3 zile în urmă
- o lună în urmă
1453
37
Jeff, codul este frumos, dar ar putea fi mai clare cu constante (cum se sugerează în Cod Complet).
jquery.timeago plugin
Jeff, pentru că Stack Overflow foloseste jQuery intens, vă recomandăm jquery.timeago plugin.
Beneficii:
Doar atașați-l la marcajele de timp pe DOM gata:
Acest lucru va transforma toate
abbr
elemente cu o clasă de timeago și ISO 8601 timestamp în titlu:în ceva de genul asta:
care produce: 4 luni în urmă. Pe măsură ce trece timpul, marcajele de timp se va actualiza automat.
Disclaimer: am scris acest plugin, deci am'm părtinitoare.
Aici's cum o fac
Eu prefer această versiune pentru concizie, și capacitatea de a adăuga noi bifați puncte. Acest lucru ar putea fi încapsulate cu o Ultima()` extensie pentru Durata de timp în loc de asta timp de 1 linie, dar pentru concizie în postarea, asta va face. Aceasta stabilește o oră, 1 oră în urmă, prin furnizarea de o oră până la 2 ore s-au scurs
Aici o rescriere de Jeffs Script PHP:
http://refactormycode.com/codes/493-twitter-esque-relative-dates
C# 6 versiune:
Aici's o implementare am adăugat ca o metodă de prelungire a DateTime clasa care se ocupă de ambele viitor și date din trecut și oferă o aproximare opțiune care vă permite să specificați nivelul de detaliu're în căutarea pentru ("3 ore în urmă" vs "3 ore, 23 minute, 12 secunde în urmă"):
Mi-ar recomanda calcul acest lucru pe partea de client prea. Mai puțin de lucru pentru server.
Următoarele este versiunea care o folosesc eu (de la Zach Leatherman)
Există, de asemenea, un pachet numit Humanizer pe Nuget și este de fapt, funcționează foarte bine
Scott Hanselman are o writeup pe pe blog
@jeff
IMHO ta pare un pic cam lung. Cu toate acestea se pare un pic mai robust, cu suport pentru "ieri" și "de ani". Dar, în experiența mea, atunci când acest lucru este folosit de persoana este cel mai probabil pentru a vizualiza conținutul în primele 30 de zile. Acesta este doar într-adevăr hardcore oameni care vin după aceea. De aceea, de obicei, am ales să fiu scurt și simplu.
Aceasta este metoda pe care eu sunt în prezent, folosind pe unul dintre site-urile mele. Aceasta returnează numai o rudă zi, oră, timp. Și apoi utilizatorul trebuie să palmă pe "acum" la ieșire.
Un cuplu de ani mai târziu la petrecere, dar am avut o cerință pentru a face acest lucru pentru atât trecutul cât și viitorul date, așa că am combinat [Jeff][1]'s și [Vincent's][2] în acest sens. L's o ternarytastic extravaganta! :)
Există o modalitate ușoară de a face acest lucru în Java? La java.util.Data clasa pare destul de limitate.
Aici este meu rapid și murdar Java soluție:
iPhone Objective-C Versiunea
Dat lumii și soțul ei par a fi postarea mostre de cod, aici este ceea ce am scris acum ceva timp, bazat pe câteva dintre aceste răspunsuri.
Am avut o nevoie specifică pentru acest cod pentru a fi localisable. Așa că am două clase — "Gramatică", care specifică localisable termeni, și
FuzzyDateExtensions
, care deține o grămadă de metode de extensie. Am avut nevoie să se ocupe de viitorul datetimes, deci este făcut nici o încercare să le ocupe cu acest cod.Am'am lăsat o parte din XMLdoc în sursă, dar eliminat cele mai multe (în cazul în care acestea'd evident) pentru concizie's sake. Am'am, de asemenea, nu sunt incluse în fiecare membru al clasei aici:
Anii `FuzzyDateString clasa conține:
Unul dintre principalele lucruri pe care am vrut să realizeze, precum și a localizării, a fost "astazi" ar însemna doar "acest calendar zi", deci
IsToday
,IsThisMonth
, `IsThisYear metodele arata astfel:și rotunjirea metode sunt de genul asta (m-am'am inclus
RoundedMonths
, ca's un pic diferit):Sper că oamenii vor găsi acest util și/sau interesante :o)
folosind Fluent DateTime
În PHP, am face în acest fel:
Am crezut că am'd dea o șansă folosind clase și polimorfism. Am avut un predecesor care a folosit sub-clasarea care a sfârșit prin a avea prea mult deasupra capului. Am'am trecut la un sistem mai flexibil delega / proprietate publică model de obiect care este semnificativ mai bun. Codul meu este foarte ușor, mai precis, aș vrea să pot veni cu o modalitate mai bună de a genera "luni" nu't par prea over-engineered.
Cred că m-am'd încă stick cu Jeff's dacă-atunci cascadă, deoarece's mai puțin cod și l's mai simple (it's cu siguranță mai ușor pentru a se asigura că'll lucreze cum era de așteptat).
Pentru codul de mai jos PrintRelativeTime.GetRelativeTimeMessage(Durata de timp în urmă) returnează timp relativ mesaj (de exemplu, "ieri").
puteți încerca acest lucru.Cred că va funcționa corect.
Atunci când știi viewer's de fus orar, s-ar putea fi mai clar de a utiliza zile calendaristice de la zi la scară. Am'm nu sunt familiarizați cu .NET biblioteci deci eu nu't știu cum ai'd face asta in C#, din păcate.
Pe site-uri de consum, ai putea fi, de asemenea, de mână-valurile sub un minut. "mai Puțin de un minut în urmă" sau "acum" ar putea fi destul de bun.
La fel ca un alt răspuns la această întrebare dar ca o metodă de prelungire cu un dicționar static.