Saya mencoba mengubah timestamp format 2009-09-12 20:57:19
dan mengubahnya menjadi sesuatu seperti 3 minutes ago
dengan PHP.
Saya menemukan skrip yang berguna untuk melakukan ini, tetapi saya pikir ini sedang mencari format yang berbeda untuk digunakan sebagai variabel waktu. Skrip yang ingin saya modifikasi agar berfungsi dengan format ini adalah:
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;
}
Saya pikir pada beberapa baris pertama skrip berusaha melakukan sesuatu yang terlihat seperti ini (matematika format tanggal berbeda):
$dif = 1252809479 - 2009-09-12 20:57:19;
Bagaimana saya bisa mengubah cap waktu saya menjadi format (unix?)?
Jawaban:
Gunakan contoh:
Input dapat berupa format tanggal dan waktu yang didukung .
Output:
Fungsi:
sumber
$full
harus menjadi input string untuk memfilter output sesuai kebutuhan). mistime_elapsed_string($datetime, $format = "ymw")
. Versi PS Flat: stackoverflow.com/a/5010169/318765$full = false
ke$level = 7
danif (!$full) $string = array_slice($string, 0, 1);
ke$string = array_slice($string, 0, $level);
dan panggiltime_elapsed_string($datetime, 2)
untuk mendapatkan hanya dua string tanggal tertinggi. Saya pikir ini harus sesuai dengan semua kebutuhan.Unknown property (w)
pada baris ini$diff->w = floor($diff->d / 7);
Unknown property (w)
dalam PHP5.3 dan di bawah ini, konversikan $ diff dari suatu objek menjadi sebuah array dan sesuaikan kode yang sesuai. Saya memiliki perbaikan yang diposting di sini: stackoverflow.com/a/32723846/235633sumber
30days for month
, dan12x30days for year
, dan karena itu ia akan mengembalikan jumlah tahun yang tidak valid di bawah tahun <= 1978. Contoh di mana ia mengembalikan 39 tahun, tetapi seharusnya 38. Dan itu juga tidak bekerja untuk tahun-tahun di bawah tahun 1970.sumber
Ini sebenarnya solusi yang lebih baik yang saya temukan. Menggunakan jQuery namun bekerja dengan sempurna. Juga menyegarkan secara otomatis mirip dengan cara SO dan Facebook sehingga Anda tidak perlu me-refresh halaman untuk melihat pembaruan.
Plugin ini akan membaca
datetime
attr Anda di<time>
tag dan mengisinya untuk Anda.http://timeago.yarp.com/
sumber
Saya tidak tahu mengapa belum ada yang menyebutkan Karbon.
https://github.com/briannesbitt/Carbon
Ini sebenarnya merupakan ekstensi ke php dateTime (yang sudah digunakan di sini) dan memiliki: metode diffForHumans. Jadi yang perlu Anda lakukan adalah:
lebih banyak contoh: http://carbon.nesbot.com/docs/#api-humandiff
Kelebihan dari solusi ini:
sumber
Saya menemukan hasil seperti berikut ini:
Karena itu saya menyadari fungsi yang menghargai bentuk jamak, menghapus nilai kosong dan secara opsional dimungkinkan untuk mempersingkat output:
Terlihat jauh lebih baik:
Opsional gunakan
$level = 2
untuk mempersingkatnya sebagai berikut:Hapus
$lang
bagian jika Anda hanya membutuhkannya dalam bahasa Inggris atau edit terjemahan ini sesuai dengan kebutuhan Anda:sumber
explode
danarray_combine
.sumber
Saya sedikit memodifikasi fungsi aslinya (menurut saya lebih bermanfaat, atau logis).
sumber
saya membuat ini dan itu berfungsi dengan baik itu berfungsi untuk kedua cap waktu unix suka
1470919932
atau diformat seperti16-08-11 14:53:30
sumber
switch (true)
meskipun$time
akan mengevaluasi ketrue
?Hanya untuk melempar opsi lain ...
Sementara saya lebih suka memposting metode DateTime di sini , saya tidak suka fakta itu ditampilkan 0 tahun dll.
sumber
ini membantu Anda memeriksanya
sumber
Saya biasanya menggunakan ini untuk mengetahui perbedaan antara
current
danpassed
datetime stamp
KELUARAN
KODE
sumber
Saya sadar ada beberapa jawaban di sini, tetapi inilah yang saya temukan. Ini hanya menangani nilai-nilai DATETIME MySQL sesuai pertanyaan awal yang saya jawab. Array $ a membutuhkan beberapa pekerjaan. Saya menerima komentar tentang cara meningkatkan. Panggil sebagai:
echo time_elapsed_string ('2014-11-14 09:42:28');
sumber
Saya mencoba ini dan bekerja dengan baik untuk saya
Periksa tautan ini untuk referensi di sini
Terima kasih! dan bersenang-senang.
sumber
Ini yang saya ikuti. Ini adalah versi modifikasi dari posting Abbbas khan:
sumber
Banyak solusi di sini tidak memperhitungkan pembulatan. Sebagai contoh:
Peristiwa terjadi pukul 15:00 dua hari yang lalu. Jika Anda memeriksa pukul 2 siang, itu akan ditampilkan satu hari yang lalu. Jika Anda memeriksa pukul 4 sore, itu akan ditampilkan dua hari yang lalu.
Jika Anda bekerja dengan waktu unix, ini membantu:
Ini tidak sempurna jika Anda khawatir tentang detik kabisat dan waktu musim panas.
sumber
Coba ini, saya menemukannya dari kode lama saya, yang menunjukkan Hasil yang benar
Contoh:
echo ago('2020-06-03 00:14:21 AM');
Keluaran:
6 days
sumber
Anda harus mengambil setiap bagian dari stempel waktu Anda, dan mengubahnya menjadi waktu Unix. Misalnya untuk timestamp, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 akan memberi Anda perkiraan KUAT jam sejak 1 Januari 1970.
Ambil angka itu, kalikan dengan 60 dan tambahkan 57 untuk mendapatkan menit.
Ambil itu, kalikan dengan 60 dan tambahkan 19.
Itu akan mengubahnya dengan sangat kasar dan tidak akurat.
Apakah ada alasan Anda tidak bisa hanya mengambil waktu Unix yang normal untuk memulai?
sumber
Ada beberapa masalah dengan beberapa tampilan bahasa waktu lalu misalnya dalam bahasa Arab ada 3 format yang diperlukan untuk menampilkan tanggal. Saya menggunakan fungsi ini dalam proyek saya semoga mereka dapat membantu seseorang (saran atau perbaikan apa pun saya akan menjadi :) :)
sumber
sumber
Ini solusi saya, silakan periksa dan modifikasi sesuai kebutuhan Anda
Terima kasih
sumber
sumber
Fungsi ini tidak dibuat untuk digunakan untuk bahasa Inggris. Saya menerjemahkan kata-kata dalam bahasa Inggris. Ini perlu diperbaiki lebih lanjut sebelum menggunakan untuk bahasa Inggris.
sumber
Penggunaan:
Fungsi:
sumber
Jawaban yang sedikit dimodifikasi dari atas:
sumber
Berikut ini adalah solusi yang sangat sederhana dan sangat efisien.
echo timeElapsed (1201570814);
Output sampel:
6 tahun 4 bulan 3 minggu 4 hari 12 jam 40 menit dan 36 detik.
sumber
Inilah solusi saya untuk modul notifikasi yang saya buat beberapa waktu lalu. Ini mengembalikan output yang mirip dengan dropdown notifikasi Facebook (mis. 1 hari yang lalu, Baru saja, dll).
sumber
cukup lewati waktu tanggal ke func ini. itu akan dicetak dalam format waktu lalu untuk Anda
sumber
Saya menggunakan fungsi berikut selama beberapa tahun. Dan itu berfungsi dengan baik:
sumber