Setiap contoh ini menceritakan tarikh penuh dan/atau masa beberapa jenis aktiviti - sama ada artikel yang diterbitkan, atau komen pembaca, atau mungkin video yang dimuat naik.
Format tarikh seperti ini mungkin kelihatan sangat munasabah. Lagipun, mereka bermaklumat dan boleh dibaca manusia! Baiklah, tetapi "boleh dibaca manusia" tidak perlu bermakna pengguna akan dapat memahami bagaimana baru-baru ini aktiviti telah berlaku. Web adalah tempat yang bergerak pantas, dan memberikan kandungan anda rasa kesegaran boleh menjadi kunci untuk melibatkan diri dengan penonton anda! Oleh itu, mari kita lihat bagaimana kita dapat memperbaiki format tarikh biasa ini.TRIK LITTLE
Sekali lagi, katakan anda telah tersandung pada jawatan yang sebenarnya diterbitkan hanya beberapa minit yang lalu, tetapi subheading pos menyatakan ini:
... atau ini:diterbitkan pada 2016-09-12, 09:41:23
Masalah dengan mesej ini adalah bahawa mereka tidak menyampaikan perasaan bahawa laman web anda baru saja dikemas kini atau anda melakukannya dengan kerap. Jadi, pastinya lebih menarik - dan lebih jelas - untuk membentangkan masa dengan cara ini:diterbitkan 2 minit yang lalu
melihat ini berkali -kali sebelum ini? Tetapi berapa ramai daripada anda yang telah membina ini ke dalam projek anda? Ambil Facebook sebagai contoh: Apa yang akan kelihatan seperti jika mereka menyampaikan tarikh untuk kandungan terkini seperti dalam contoh pertama saya? Bandingkan lajur kiri dan kanan dalam imej berikut:
Tarikh lajur kiri tidak begitu menarik, adakah mereka? Saya akan bertaruh contoh tangan yang betul lebih menarik kepada anda. Mengetahui bahawa kandungannya segar sangat penting - terutamanya di rangkaian sosial, di mana orang lebih cenderung untuk mengabaikan kandungan yang sudah lama atau tidak dengan jelas.
Untuk membentangkan tarikh yang lebih baik , anda memerlukan beberapa skrip sisi pelayan, dan saya akan menggunakan PHP untuk demo ini. Saya mencipta fungsi kecil yang dipanggil time_ago (), seperti yang ditunjukkan di sini:
<span><span><?php </span></span><span> </span><span> <span>define( TIMEBEFORE_NOW, 'now' ); </span></span><span> <span>define( TIMEBEFORE_MINUTE, '{num} minute ago' ); </span></span><span> <span>define( TIMEBEFORE_MINUTES, '{num} minutes ago' ); </span></span><span> <span>define( TIMEBEFORE_HOUR, '{num} hour ago' ); </span></span><span> <span>define( TIMEBEFORE_HOURS, '{num} hours ago' ); </span></span><span> <span>define( TIMEBEFORE_YESTERDAY, 'yesterday' ); </span></span><span> <span>define( TIMEBEFORE_FORMAT, '%e %b' ); </span></span><span> <span>define( TIMEBEFORE_FORMAT_YEAR, '%e %b, %Y' ); </span></span><span> </span><span> <span>function time_ago( $time ) </span></span><span> <span>{ </span></span><span> <span>$out = ''; // what we will print out </span></span><span> <span>$now = time(); // current time </span></span><span> <span>$diff = $now - $time; // difference between the current and the provided dates </span></span><span> </span><span> <span>if( $diff < 60 ) // it happened now </span></span><span> <span>return TIMEBEFORE_NOW; </span></span><span> </span><span> <span>elseif( $diff < 3600 ) // it happened X minutes ago </span></span><span> <span>return str_replace( '{num}', ( $out = round( $diff / 60 ) ), $out == 1 ? TIMEBEFORE_MINUTE : TIMEBEFORE_MINUTES ); </span></span><span> </span><span> <span>elseif( $diff < 3600 * 24 ) // it happened X hours ago </span></span><span> <span>return str_replace( '{num}', ( $out = round( $diff / 3600 ) ), $out == 1 ? TIMEBEFORE_HOUR : TIMEBEFORE_HOURS ); </span></span><span> </span><span> <span>elseif( $diff < 3600 * 24 * 2 ) // it happened yesterday </span></span><span> <span>return TIMEBEFORE_YESTERDAY; </span></span><span> </span><span> <span>else // falling back on a usual date format as it happened later than yesterday </span></span><span> <span>return strftime( date( 'Y', $time ) == date( 'Y' ) ? TIMEBEFORE_FORMAT : TIMEBEFORE_FORMAT_YEAR, $time ); </span></span><span> <span>} </span></span><span> </span><span><span>?></span></span>
Mari lihat beberapa butiran kod ini.
Jadi, sebagai contoh, jika anda ingin mendapatkan ini ke laman WordPress anda, anda hanya akan menulis ini:
<span><span><?=time_ago( get_the_time( 'U' ) )?></span></span>
atau jika ia adalah beberapa CMS hipotesis lain:
<?=time_ago( $post->date_created )?>
atau cara statik:
<?=time_ago( 1447571705 )?>
Terdapat elemen HTML tertentu yang perlu anda gunakan untuk menyampaikan tarikh:
Published <time datetime="<?=date( 'Y-m-d', $time )?>" title="<?=strftime( date( 'Y', $time ) == date( 'Y' ) ? TIMEBEFORE_FORMAT : TIMEBEFORE_FORMAT_YEAR, $time )?>"> <?=time_ago( $time )?> </time>
Ini akan menghasilkan kebolehcapaian yang lebih baik, contohnya:
Published <time datetime="2015-09-12" title="September 12">3 minutes ago</time>
Adakah anda melihat atribut [tajuk]? Ia adalah peningkatan kebolehgunaan yang kecil: Meletakkan kursor teks pada tarikh menunjukkan mesej yang dibentangkan dalam atribut tajuk. Itu untuk pengguna yang, atas sebab tertentu, sedang mencari tarikh "sebenar". Berikut adalah helah CSS kecil untuk meningkatkan perasaan bahawa ada sesuatu yang lebih:
<span>time<span><span>[title]</span></span> </span><span>{ </span> <span>cursor: help; </span><span>}</span>
JavaScript Enhancement
Ada satu lagi perkara yang boleh kita lakukan! Pernahkah anda perasan bahawa Facebook juga meningkatkan tarikh dalam masa nyata? Hanya menonton pada 3 minit selama satu minit dan ia akan berubah menjadi 4 minit dan sebagainya. Oleh itu, terdapat jenis laman web ini berfungsi sebagai peningkatan yang sangat baik. Ia tidak akan berguna pada jawatan artikel seperti ini, tetapi ia sempurna di laman web seperti ReaderRr:
<span><span><?php </span></span><span> </span><span> <span>define( TIMEBEFORE_NOW, 'now' ); </span></span><span> <span>define( TIMEBEFORE_MINUTE, '{num} minute ago' ); </span></span><span> <span>define( TIMEBEFORE_MINUTES, '{num} minutes ago' ); </span></span><span> <span>define( TIMEBEFORE_HOUR, '{num} hour ago' ); </span></span><span> <span>define( TIMEBEFORE_HOURS, '{num} hours ago' ); </span></span><span> <span>define( TIMEBEFORE_YESTERDAY, 'yesterday' ); </span></span><span> <span>define( TIMEBEFORE_FORMAT, '%e %b' ); </span></span><span> <span>define( TIMEBEFORE_FORMAT_YEAR, '%e %b, %Y' ); </span></span><span> </span><span> <span>function time_ago( $time ) </span></span><span> <span>{ </span></span><span> <span>$out = ''; // what we will print out </span></span><span> <span>$now = time(); // current time </span></span><span> <span>$diff = $now - $time; // difference between the current and the provided dates </span></span><span> </span><span> <span>if( $diff < 60 ) // it happened now </span></span><span> <span>return TIMEBEFORE_NOW; </span></span><span> </span><span> <span>elseif( $diff < 3600 ) // it happened X minutes ago </span></span><span> <span>return str_replace( '{num}', ( $out = round( $diff / 60 ) ), $out == 1 ? TIMEBEFORE_MINUTE : TIMEBEFORE_MINUTES ); </span></span><span> </span><span> <span>elseif( $diff < 3600 * 24 ) // it happened X hours ago </span></span><span> <span>return str_replace( '{num}', ( $out = round( $diff / 3600 ) ), $out == 1 ? TIMEBEFORE_HOUR : TIMEBEFORE_HOURS ); </span></span><span> </span><span> <span>elseif( $diff < 3600 * 24 * 2 ) // it happened yesterday </span></span><span> <span>return TIMEBEFORE_YESTERDAY; </span></span><span> </span><span> <span>else // falling back on a usual date format as it happened later than yesterday </span></span><span> <span>return strftime( date( 'Y', $time ) == date( 'Y' ) ? TIMEBEFORE_FORMAT : TIMEBEFORE_FORMAT_YEAR, $time ); </span></span><span> <span>} </span></span><span> </span><span><span>?></span></span>
Akhirnya, kita perlu menukar kod PHP menjadi setara JavaScript. Saya telah melakukan ini untuk anda di Vanilla JS (walaupun versi jQuery juga tersedia). Skrip berjalan melalui setiap elemen [data-masa] sekali setiap minit (setTimeout (dikemas kini, 1000 * 60)) dan mengemas kini nilai:
<span><span><?=time_ago( get_the_time( 'U' ) )?></span></span>
Satu lagi perkara
<?=time_ago( $post->date_created )?>
Jadi, apa pendapat anda tentang penyelesaian ini? Adakah anda akan mempertimbangkan menggunakannya pada projek anda yang seterusnya? Adakah anda mempunyai soalan mengenainya? Tolong beritahu saya dalam komen.
dengan cara ini, saya harap seseorang dapat memberitahu orang Instagram bahawa 122W tidak sejuk, dan 2.4yrs akan lebih mudah difahami. Itu lebih baik, bukan?
Soalan Lazim (Soalan Lazim) Mengenai Mengira Masa 'Ago'
Bolehkah fungsi masa 'Ago' mengendalikan tarikh masa depan? tarikh. Jika tarikh input lebih awal daripada tarikh semasa, fungsi akan mengira masa sehingga peristiwa dan bukannya masa sejak acara tersebut. Hasilnya akan menjadi rentetan yang mewakili masa yang tinggal dalam format yang boleh dibaca manusia, seperti "dalam 5 minit" atau "dalam 2 hari". Keperluan saya?
Atas ialah kandungan terperinci Masa yang lalu: Cara Memaparkan Tarikh Terbitan Seiring Sejak Dihantar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!