Saya ingin mengubah variabel $uptime
yaitu detik, menjadi hari, jam, menit dan detik.
Contoh:
$uptime = 1640467;
Hasilnya harus:
18 days 23 hours 41 minutes
Ini bisa dicapai dengan DateTime
kelas
Menggunakan:
echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds
Fungsi:
function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}
@
artinya ketika diteruskan sebagai argumen keDateTime
konstruktor?@
adalah stempel waktu unix.Ini adalah fungsi yang ditulis ulang untuk memasukkan hari. Saya juga mengubah nama variabel agar kode lebih mudah dipahami ...
Sumber: CodeAid () - http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)
sumber
Berdasarkan jawaban Julian Moreno, namun diubah menjadi respon berupa string (bukan array), hanya mencantumkan interval waktu yang diperlukan dan tidak mengasumsikan bentuk jamak.
Perbedaan antara ini dan jawaban pilihan tertinggi adalah:
Untuk beberapa
259264
detik, kode ini akan memberiUntuk beberapa
259264
detik, jawaban pilihan tertinggi (oleh Glavić) akan diberikanSaya harap ini membantu seseorang.
sumber
Ini dia fungsi PHP 8 baris sederhana yang mengubah beberapa detik menjadi string yang dapat dibaca manusia termasuk jumlah bulan untuk detik yang banyak:
Fungsi PHP detik2human ()
sumber
Hasilnya akan menjadi 19 23:41:07. Jika hanya satu detik lebih lama dari hari biasanya, itu meningkatkan nilai hari selama 1 hari. Inilah mengapa ini menunjukkan 19. Anda dapat meledakkan hasil untuk kebutuhan Anda dan memperbaikinya.
sumber
$uptime = gmdate("y m d H:i:s", 1640467); $uptimeDetail = explode(" ",$uptime); echo (string)($uptimeDetail[0]-70).' year(s) '.(string)($uptimeDetail[1]-1).' month(s) '.(string)($uptimeDetail[2]-1).' day(s) '.(string)$uptimeDetail[3];
Ini juga akan memberi Anda informasi tahun dan bulan juga.Ada beberapa jawaban yang sangat bagus di sini tetapi tidak satupun yang memenuhi kebutuhan saya. Saya membuat jawaban Glavic untuk menambahkan beberapa fitur tambahan yang saya butuhkan;
Anda dapat melihat versi kode yang sedang berjalan here.
sumber
Singkat, sederhana, dapat diandalkan:
sumber
Pendekatan paling sederhana adalah membuat metode yang mengembalikan DateInterval dari DateTime :: diff waktu relatif dalam $ detik dari waktu saat ini $ sekarang yang kemudian dapat Anda rantai dan format. Sebagai contoh:-
Sekarang rangkai panggilan metode Anda ke DateInterval :: format
Hasil:
sumber
Meskipun ini pertanyaan yang cukup lama - orang mungkin menganggap ini berguna (tidak ditulis untuk menjadi cepat):
hasil:
sumber
sumber
sumber
Solusi yang harus mengecualikan nilai 0 dan menetapkan nilai tunggal / jamak yang benar
sumber
versi diperpanjang dari solusi luar biasa Glavić , memiliki validasi bilangan bulat, menyelesaikan masalah 1, dan dukungan tambahan selama bertahun-tahun, dengan mengorbankan komputer yang kurang ramah parsing demi menjadi lebih ramah manusia:
var_dump(secondsToHumanReadable(1*60*60*2+1));
->string(16) "2 hours 1 second"
sumber
Kelas interval yang saya tulis dapat digunakan. Ini bisa digunakan dengan cara yang berlawanan juga.
Info lebih lanjut di sini https://github.com/LubosRemplik/CakePHP-Interval
sumber
Dengan DateInterval :
sumber
Berikut beberapa kode yang saya gunakan untuk mendapatkan durasi antara dua tanggal. Ini menerima dua tanggal dan memberi Anda jawaban terstruktur kalimat yang bagus.
Ini adalah versi kode yang sedikit dimodifikasi yang ditemukan di sini .
Sumber: https://gist.github.com/ozh/8169202
sumber
Semua dalam satu solusi. Tidak memberikan unit dengan nol. Hanya akan menghasilkan jumlah unit yang Anda tentukan (3 secara default). Cukup panjang, mungkin tidak terlalu elegan. Definisi bersifat opsional, tetapi mungkin berguna dalam proyek besar.
Jangan ragu untuk memberikan suara negatif, tetapi pastikan untuk mencobanya di kode Anda. Mungkin itu yang Anda butuhkan.
sumber
Solusi untuk yang ini saya gunakan (kembali ke hari-hari saat belajar PHP) tanpa fungsi apa pun:
Meskipun ini adalah pertanyaan lama, pelajar baru yang menemukan ini, mungkin menemukan jawaban ini berguna.
sumber
sumber
Saya mengedit salah satu kode agar berfungsi dengan baik ketika nilai negatif datang.
floor()
fungsi tidak memberikan hitungan yang benar ketika nilainya negatif. Jadi kita perlu menggunakanabs()
fungsi sebelum menggunakannya di dalamfloor()
fungsi.$inputSeconds
variabel dapat menjadi perbedaan antara cap waktu saat ini dan tanggal yang diperlukan.sumber
Variasi jawaban @ Glavić - yang satu ini menyembunyikan angka nol di depan untuk hasil yang lebih singkat dan menggunakan bentuk jamak di tempat yang benar. Ini juga menghilangkan ketepatan yang tidak perlu (misalnya jika perbedaan waktu lebih dari 2 jam, Anda mungkin tidak peduli berapa menit atau detik).
sumber
Saya tidak tahu mengapa beberapa dari jawaban ini sangat panjang atau rumit. Ini salah satu yang menggunakan Kelas DateTime . Mirip dengan jawaban radzserg. Ini hanya akan menampilkan unit yang diperlukan, dan waktu negatif akan memiliki akhiran 'lalu' ...
EDIT: Jika Anda ingin menyingkat contoh di atas untuk menggunakan lebih sedikit variabel / ruang (dengan mengorbankan keterbacaan), berikut adalah versi alternatif yang melakukan hal yang sama:
sumber
$thetime
dalam pengembalian, misalnya,isset($thetime)
$ value berasal dari Database. Kode ini ada di Codeigniter. $ SESSION digunakan untuk menyimpan langganan pengguna. itu wajib. Saya menggunakannya dalam kasus saya, Anda dapat menggunakan apa pun yang Anda inginkan.
sumber
$value
asalnya Mengapa Anda ingin memperkenalkan sesi? Bagaimana ini mengembalikan string yang tepat untuk detik, menit, dan jam?Ini adalah fungsi yang saya gunakan di masa lalu untuk mengurangi tanggal dari tanggal lain yang terkait dengan pertanyaan Anda, prinsip saya adalah mendapatkan berapa hari, jam menit, dan detik yang tersisa hingga produk kedaluwarsa:
sumber