Próbuję przekonwertować znacznik czasu formatu 2009-09-12 20:57:19
i przekształcić go w coś podobnego 3 minutes ago
do PHP.
Znalazłem przydatny skrypt do tego, ale myślę, że szuka innego formatu, który mógłby być użyty jako zmienna czasowa. Skrypt, który chcę zmodyfikować do pracy z tym formatem to:
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
Myślę, że w pierwszych kilku wierszach skrypt próbuje zrobić coś, co wygląda następująco (inna matematyka w formacie daty):
$dif = 1252809479 - 2009-09-12 20:57:19;
Jak powinienem przekonwertować znacznik czasu na ten (uniksowy) format?
Odpowiedzi:
Użyj przykładu:
Dane wejściowe mogą być dowolnym obsługiwanym formatem daty i godziny .
Wynik :
Funkcja:
źródło
$full
powinna być ciągiem wejściowym do filtrowania danych wyjściowych w razie potrzeby). nptime_elapsed_string($datetime, $format = "ymw")
. Wersja PS Flat: stackoverflow.com/a/5010169/318765$full = false
się$level = 7
iif (!$full) $string = array_slice($string, 0, 1);
na$string = array_slice($string, 0, $level);
zawołanietime_elapsed_string($datetime, 2)
do uzyskania tylko dwie najwyższe date sznurki. Myślę, że to powinno pasować do wszystkich potrzeb.Unknown property (w)
$diff->w = floor($diff->d / 7);
Unknown property (w)
w PHP5.3 i niższych wersjach, przekonwertuj $ diff z obiektu na tablicę i odpowiednio dostosuj resztę kodu. Mam poprawkę opublikowaną tutaj: stackoverflow.com/a/32723846/235633źródło
30days for month
, i12x30days for year
dlatego zwraca niepoprawną liczbę lat poniżej roku <= 1978. Przykład, w którym zwraca 39 lat, ale powinien 38. I nie działa również dla lata poniżej 1970 r.źródło
To faktycznie lepsze rozwiązanie, które znalazłem. Używa jQuery, jednak działa idealnie. Także to odświeża się automatycznie podobny do sposobu SO i Facebook robi, więc nie trzeba odświeżyć stronę, aby zobaczyć aktualizacje.
Ta wtyczka odczyta
datetime
attr w<time>
tagu i wypełni go dla Ciebie.http://timeago.yarp.com/
źródło
Nie wiem, dlaczego nikt jeszcze nie wspomniał o Carbon.
https://github.com/briannesbitt/Carbon
W rzeczywistości jest to rozszerzenie php dateTime (które zostało już tutaj użyte) i zawiera metodę: diffForHumans. Wszystko, co musisz zrobić, to:
więcej przykładów: http://carbon.nesbot.com/docs/#api-humandiff
Zalety tego rozwiązania:
źródło
Znalazłem wyniki takie jak następujące brzydkie:
Z tego powodu zrealizowałem funkcję, która szanuje liczbę mnogą, usuwa puste wartości i opcjonalnie możliwe jest skrócenie wyniku:
Wygląda znacznie lepiej:
Opcjonalnie użyj,
$level = 2
aby skrócić go w następujący sposób:Usuń
$lang
część, jeśli potrzebujesz tylko w języku angielskim lub edytuj to tłumaczenie, aby dostosować je do swoich potrzeb:źródło
explode
iarray_combine
.źródło
Zmodyfikowałem nieco oryginalną funkcję, aby była (moim zdaniem bardziej użyteczna lub logiczna).
źródło
Zrobiłem to i działa dobrze działa zarówno dla znacznika czasu unix jak
1470919932
lub czasu sformatowanego jak16-08-11 14:53:30
źródło
switch (true)
chociaż$time
będzie to oceniaćtrue
?Po prostu wrzuć inną opcję ...
Chociaż wolę zamieszczanie tutaj metody DateTime , nie podobało mi się, że wyświetlała 0 lat itp.
źródło
pomoże ci to sprawdzić
źródło
Zwykle używam tego, aby znaleźć różnicę między
current
ipassed
datetime stamp
WYNIK
KOD
źródło
Wiem, że jest tu kilka odpowiedzi, ale to właśnie wymyśliłem. To obsługuje tylko wartości MySQL DATETIME zgodnie z pierwotnym pytaniem, na które odpowiadałem. Tablica $ a wymaga trochę pracy. Z zadowoleniem przyjmuję komentarze na temat poprawy. Zadzwoń jako:
echo time_elapsed_string ('2014-11-14 09:42:28');
źródło
Próbowałem tego i działa dobrze dla mnie
Sprawdź ten link w celach informacyjnych tutaj
Dzięki! i baw się dobrze.
źródło
Po to poszedłem. To zmodyfikowana wersja postu Abbbasa Khana:
źródło
Wiele rozwiązań tutaj nie uwzględniało zaokrągleń. Na przykład:
Wydarzenie miało miejsce o godzinie 15:00 dwa dni temu. Jeśli sprawdzasz o godzinie 14:00, pokaże to dzień temu. Jeśli sprawdzasz o 16, pokaże to dwa dni temu.
Jeśli pracujesz z czasem uniksowym, pomaga to:
Nie jest to idealne rozwiązanie, jeśli martwisz się o sekundy przestępne i czas letni.
źródło
Spróbuj, znalazłem to na podstawie moich starych kodów, które pokazują poprawny wynik
Przykład:
echo ago('2020-06-03 00:14:21 AM');
Wynik:
6 days
źródło
Musisz wziąć każdy pojedynczy znacznik czasu i przekształcić go w czas uniksowy. Na przykład znacznik czasu, 2009-09-12 20:57:19.
((((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 dałby WIĘKSZE oszacowanie godzin od 1 stycznia 1970 roku.
Weź tę liczbę, pomnóż ją przez 60 i dodaj 57, aby uzyskać minuty.
Weź to, pomnóż przez 60 i dodaj 19.
To jednak przekształciłoby to bardzo z grubsza i niedokładnie.
Czy jest jakiś powód, dla którego nie możesz po prostu poświęcić normalnego czasu na Uniksa?
źródło
Występuje pewien problem z czasem wyświetlania języka, na przykład w języku arabskim istnieją 3 potrzebne formaty do wyświetlania daty. Używam tych funkcji w moich projektach, mam nadzieję, że mogą komuś pomóc (wszelkie sugestie lub ulepszenia będę apperciate :))
źródło
źródło
Oto moje rozwiązanie, sprawdź i zmodyfikuj zgodnie z własnymi wymaganiami
Dzięki
źródło
źródło
Ta funkcja nie jest przeznaczona do używania w języku angielskim. Przetłumaczyłem te słowa na angielski. To wymaga więcej poprawek przed użyciem w języku angielskim.
źródło
Zastosowanie:
Funkcjonować:
źródło
Nieznacznie zmodyfikowana odpowiedź z góry:
źródło
Poniżej przedstawiono bardzo proste i niezwykle wydajne rozwiązanie.
echo timeElapsed (1201570814);
Przykładowe dane wyjściowe:
6 lat 4 miesiące 3 tygodnie 4 dni 12 godzin 40 minut i 36 sekund.
źródło
Oto moje rozwiązanie dla modułu powiadomień, który zbudowałem jakiś czas temu. Zwraca dane wyjściowe podobne do menu powiadomień Facebooka (np. 1 dzień temu, Właśnie teraz itp.).
źródło
po prostu podaj datę i godzinę dla tej funkcji. wydrukuje dla ciebie format czasu temu
źródło
Korzystam z następującej funkcji od kilku lat. I działa dobrze:
źródło