Saya sekarang telah menjadi seorang ayah selama 1,5 tahun terakhir dan itu jelas terlihat dari ketepatan waktu dalam menggabungkan PR atau mendorong paket ini lebih jauh. Waktu adalah kendala terbesar di sini. Saya akan dengan senang hati meneruskan proyek ini kepada seseorang yang memiliki lebih banyak waktu dan motivasi untuk memajukan proyek ini. Kirimkan pesan saja padaku. Bersulang!
_ _ _ __ ___ ___ _ __ ___ ___ _ __ | |_ _ __ | |__ _ __ | '_ ` _ / _ | '_ ` _ / _ '_ | __| | '_ | '_ | '_ | | | | | | (_) | | | | | | __/ | | | |_ _| |_) | | | | |_) | |_| |_| |_|___/|_| |_| |_|___|_| |_|__(_) .__/|_| |_| .__/ |_| |_|
Ubah catatan
Pustaka tanggal untuk menguraikan, memanipulasi, dan memformat tanggal dengan i18n.
PHP 5.3 atau lebih baru sejak moment.php didasarkan pada Kelas DateTime php.
Instal mudah melalui komposer. Masih belum tahu apa itu komposer? Informasikan diri Anda di sini.
composer require fightbulc/moment
$m = MomenMomen baru(); // defaultnya adalah "sekarang" UTCecho $m->format(); // misalnya 03-10-2012T10:00:00+0000$m = new MomentMoment('now', 'Europe/Berlin');echo $m->format(); // misalnya 03-10-2012T12:00:00+0200$m = new MomentMoment('2017-06-06T10:00:00', 'Europe/Berlin');echo $m->format(); // misalnya 03-10-2012T12:00:00+0200$m = new MomentMoment(1499366585);echo $m->format(); // misalnya 06-07-2017T18:43:05+0000
Momen mem-parsing format tanggal berikut sebagai input:
const ATOM = 'Ym-dTH:i:sP'; // 15-08-2005T15:52:01+00:00const COOKIE = 'l, dMy H:i:s T'; // Senin, 15 Agustus 2005 15:52:01 UTCconst ISO8601 = 'Ym-dTH:i:sO'; // 15-08-2005T15:52:01+0000const RFC822 = 'D, d M y H:i:s O'; // Sen, 15 Agustus 05 15:52:01 +0000const RFC850 = 'l, dMy H:i:s T'; // Senin, 15-Agt-05 15:52:01 UTCconst RFC1036 = 'D, d M y H:i:s O'; // Sen, 15 Agustus 05 15:52:01 +0000const RFC1123 = 'D, d M Y H:i:s O'; // Sen, 15 Agustus 2005 15:52:01 +0000const RFC2822 = 'D, d M Y H:i:s O'; // Sen, 15 Agustus 2005 15:52:01 +0000const RSS = 'D, d M Y H:i:s O'; // Sen, 15 Agustus 2005 15:52:01 +0000const W3C = 'Ym-dTH:i:sP'; // 15-08-2005T15:52:01+00:00// Momen juga mencoba menguraikan tanggal tanpa zona waktu atau tanpa detikconst NO_TZ_MYSQL = 'Ymd H:i:s'; // 15-08-2005 15:52:01const NO_TZ_NO_SECS = 'Ymd H:i'; // 15-08-2005 15:52const NO_TIME = 'Ymd'; // 15-08-2005// pecahan waktu ".000" akan dihapus secara otomatis$timeWithFraction = '04-05-2016T10:00:00.000';
Lihat folder Locales
untuk melihat semua bahasa yang didukung. Lokal default adalah en_GB
.
$m = new MomentMoment();echo $m->format('[Hari Kerja:] l'); // misalnya Hari Kerja: Rabu// setel bahasa Jerman localeMomentMoment::setLocale('de_DE');$m = new MomentMoment();echo $m->format('[Wochentag:] l'); // misalnya Wochentag: Mittwoch
Bahasa yang didukung sejauh ini:
ar_TN
Arab (Tunisia) ca_ES
Katalan cs_CZ
Ceko da_DK
Denmark de_DE
Jerman (Jerman) en_CA
Inggris (Kanada) en_GB
Inggris (Inggris) en_US
Inggris (Amerika) eo_EO
Esperanto es_ES
Spanyol (Eropa) fa_IR
Farsi fi_FI
Finlandia fr_CA
Prancis (Kanada) fr_FR
Prancis ( Eropa) hu_HU
Hongaria id_ID
Indonesia it_IT
Italia ja_JP
Jepang kz_KZ
Kazakh lv_LV
Latvia (Latviešu) nl_NL
Belanda oc_LNC
Lengadocian pl_PL
Polandia pt_BR
Portugis (Brasil) pt_PT
Portugis (Portugal) ru_RU
Rusia (Versi dasar) sv_SE
Swedia th_TH
Thailand tr_TR
Turki uk_UA
Ukraina vi_VN
Vietnam zh_CN
Cina zh_TW
Cina (tradisional)
$m = new MomentMoment('25-04-2012T03:00:00', 'CET');echo $m->setTimezone('UTC')->format(); // 25-04-2012T01:00:00+0000
MomentMoment::setDefaultTimezone('CET');$m = new MomentMoment('2016-09-13T14:32:06');echo $m->format(); // 13-09-2016T14:32:06+0100
$m = new MomentMoment('25-04-2012T03:00:00', 'CET');echo $m->format('l, dS F Y / H:i (e)'); // Rabu, 25 April 2012 / 03:00 (Eropa/Berlin)
Format didasarkan pada fungsi Tanggal PHP dan kelas DateTime.
Anda sekarang dapat memasukkan penanganan format yang berbeda dengan meneruskan kelas yang mengimplementasikan FormatsInterface
. Anda dapat menemukan contoh di dalam folder pengujian untuk mengimplementasikan semua format dari moment.js. Terima kasih kepada Ashish karena telah meluangkan waktu untuk mencocokkan format moment.js
dengan format PHP. Lihat skrip pengujian untuk melihat contoh tindakannya.
Semua orang dapat menulis kelas format dengan cara yang sama. Mudah dan terukur.
// dapatkan format kelas yang diinginkan // buat momen$m = new MomentMoment('25-04-2012T03:00:00', 'CET');// format dengan moment.js definitionecho $m->format('LLLL ', MomentCustomFormatsMomentJs()); // Rabu, 25 April 2012 03.00
Custom formats
juga dapat hadir sebagai bagian dari setiap Locale
. Jika belum ada untuk lokal Anda, silakan tambahkan. Lihat contoh untuk bahasa Prancis.
Cukup bungkus semua teks Anda di dalam []
dan semua karakter akan otomatis di-escape untuk Anda.
$m = new MomentMoment('25-04-2012T03:00:00', 'CET');echo $m->format('[Kita berada di bulan:] F'); // Kita berada di bulan: April
Perhitungan ordinal internal PHP tampaknya bermasalah. Saya menambahkan perbaikan cepat untuk menangani masalah ini.
Contoh berikut mencetak minggu dalam tahun pada tanggal tertentu. Itu harus mencetak 22nd
:
// tanggal fungsi internal('WS', mktime(12, 22, 0, 5, 27, 2014)); // 22// moment.php$m = new MomentMoment('27-05-2014T12:22:00', 'CET');$m->format('WS'); // tanggal 22
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->addHours(2)->format(); // 15-05-2012T14:30:00+0200$m = MomentMoment baru('15-05-2012T12:30:00', 'CET');echo $m->subtractDays(7)->subtractMinutes(15 )->format(); // 08-05-2012T12:15:00+0200$m = MomentMoment baru('@1401443979', 'CET'); // unix timeecho $m->subtractDays(7)->subtractMinutes(15)->format(); // 23-05-2014T09:44:39+0000
Terkadang berguna untuk memanfaatkan momen tertentu dan memanfaatkannya tanpa mengubah asal usulnya. Untuk itu gunakan cloning()
.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');$c = $m->kloning()->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16
Sebagai alternatif, Anda dapat mengaktifkan mode abadi di sumbernya.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET', true);$c = $m->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16// Anda juga dapat mengubah mode abadi setelah pembuatan:$m->setImmutableMode(false)->subtractDays(1);echo $m->getDay(); // 14
Mode yang tidak dapat diubah membuat semua metode modifikasi memanggil cloning()
secara implisit sebelum menerapkan modifikasinya.
Menambahkan | Mengurangi |
---|---|
tambahkan Detik($s) | kurangi Detik($s) |
tambahkanMenit($i) | kurangiMenit($i) |
tambahkanJam($h) | kurangiJam($h) |
tambahkanHari($d) | kurangiHari($d) |
tambahkanMinggu($w) | kurangiMinggu($w) |
tambahkan Bulan($m) | kurangiBulan($m) |
tambahkanTahun($y) | kurangiTahun($y) |
Penyetel | Pengambil |
---|---|
setSecond($s) | dapatkanKedua() |
setMenit($m) | dapatkanMenit() |
setJam($h) | dapatkanJam() |
setHari($d) | dapatkan hari() |
setBulan($m) | dapatkan Bulan() |
setTahun($y) | dapatkanTahun() |
-- | dapatkan Kuartal() |
$m = new MomentMoment('2013-02-01T07:00:00');$momentFromVo = $m->fromNow();// atau dari momen tertentu$m = new MomentMoment('2013-02-01T07: 00:00');$momentFromVo = $m->from('2011-09-25T10:00:00');// hasil muncul sebagai objek nilai classecho $momentFromVo->getDirection() // "future"echo $momentFromVo->getSeconds() // -42411600echo $momentFromVo->getMinutes() // -706860echo $momentFromVo->getHours() // -11781echo $momentFromVo->getDays() // -490.88echo $momentFromVo->getWeeks() // -70.13echo $momentFromVo->getMonths() // -17.53echo $momentFromVo- >getYears() // -1.42echo $momentFromVo->getRelative() // dalam setahun
Terkadang berguna untuk mendapatkan batasan periode pada tanggal tertentu. Misalnya jika hari ini adalah hari Rabu dan saya memerlukan tanggal mulai/berakhir dari minggu hari ini. Periode yang diperbolehkan adalah week
, month
, dan quarter
.
$m = new MomentMoment('2013-10-23T10:00:00');$momentPeriodVo = $m->getPeriod('week');// hasil datang serta objek nilai classecho $momentPeriodVo->getStartDate( ) ->format('Ymd'); // 21-10-2013echo $momentPeriodVo->getEndDate() ->format('Ymd'); // 27-10-2013echo $momentPeriodVo->getRefDate() ->format('Ymd'); // 23-10-2013echo $momentPeriodVo->getInterval(); // 43 = minggu dalam setahun
Prosedur yang sama untuk periode bulanan dan triwulanan:
$momentPeriodVo = $m->getPeriod('bulan');$momentPeriodVo = $m->getPeriod('kuartal');
Waktu kalender menampilkan waktu relatif terhadap now
, tetapi sedikit berbeda dari Moment::fromNow()
. Moment::calendar()
akan memformat tanggal dengan string yang berbeda tergantung pada seberapa dekat tanggal tersebut dengan hari ini.
(MomentMoment baru('30-03-2014T16:58:00', 'CET'))->subtractDays(6)->calendar(); // minggu lalu(MomentMoment baru('30-03-2014T16:58:00', 'CET'))->subtractDays(1)->calendar(); // kemarin(MomentMoment baru('30-03-2014T16:58:00', 'CET'))->kalender(); // hari ini(MomentMoment baru('30-03-2014T16:58:00', 'CET'))->addDays(1)->calendar(); // besok(MomentMoment baru('30-03-2014T16:58:00', 'CET'))->addDays(3)->calendar(); // minggu depan(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(10)->calendar(); // segala sesuatu yang lain
Waktu | Menampilkan |
---|---|
Minggu lalu | Senin lalu pukul 15:54 |
Sehari sebelumnya | Kemarin pukul 15:54 |
Pada hari yang sama | Hari ini pukul 15:54 |
Keesokan harinya | Besok pukul 15:54 |
Minggu berikutnya | Rabu pukul 15:54 |
Segala sesuatu yang lain | 04/09/2014 |
Catatan: Gunakan $moment->calendar(false)
untuk menghilangkan waktu at 00:00
.
Proses yang sama seperti untuk moment.js: mengubah momen asli dengan menyetelnya ke awal/akhir suatu satuan waktu.
$m = new MomentMoment('20140515T10:15:23', 'CET');$m->startOf('tahun'); // disetel ke 1 Januari, 00:00 tahun ini$m->startOf('quarter'); // disetel ke awal kuartal saat ini, hari pertama setiap bulan, 00:00$m->startOf('month'); // disetel ke tanggal 1 bulan ini, 00:00$m->startOf('week'); // disetel ke hari pertama minggu ini, 00:00$m->startOf('day'); // disetel ke 00:00 hari ini$m->startOf('hour'); // disetel ke sekarang, tetapi dengan 0 menit, 0 detik$m->startOf('menit'); // disetel ke sekarang, tetapi dengan 0 detik$m->endOf('year'); // disetel ke 31 Desember, 23:59 tahun ini$m->endOf('quarter'); // disetel ke akhir kuartal saat ini, hari terakhir setiap bulan, 23:59$m->endOf('month'); // disetel ke akhir bulan ini, 23:59$m->endOf('week'); // disetel ke hari terakhir minggu ini, 23:59$m->endOf('day'); // setel ke 23:59 hari ini$m->endOf('jam'); // disetel ke sekarang, tetapi dengan 59 menit, 59 detik$m->endOf('menit'); // disetel ke sekarang, tetapi dengan 59 detik
Catatan: Saya mengabaikan periode second
karena kita tidak membahas milidetik.
Untuk salah satu pelanggan saya, saya perlu mendapatkan momen pada hari kerja yang dipilih. Tugasnya adalah: beri saya tanggal Tuesdays
dan Thursdays
untuk tiga minggu ke depan. Jadi saya menambahkan penangan kecil yang melakukan hal ini. Hasilnya Anda akan menerima array yang diisi dengan Moment Objects
.
// 1 - 7 = Sen - Minggu$weekdayNumbers = [2, // selasa4, // kamis];$m = new MomentMoment();$dates = $m->getMomentsByWeekdays($weekdayNumbers, 3);// $ tanggal = [Momen, Momen, Momen ...]
Anda sekarang dapat menjalankan hasilnya dan memformatnya ke dalam bidang drop-down atau untuk apa pun yang Anda perlukan.
Cobalah untuk mem-porting metode yang berguna dari moment.js
Tambahkan tes unit
menambahkan:
dukungan untuk PHP 8.2 #218
dukungan untuk PHP 8.3 #227
tetap:
lokal Perancis
Tes Kanada
menambahkan:
lokal Esperanto
Lokal Kazakh
tetap:
DateTime::createFromFormat tanda tangan cocok
menambahkan:
lokal Farsi
menambahkan:
pemeriksaan kode terhadap alur kerja tindakan GH
Lokal Kanada untuk bahasa Inggris/Prancis
tetap:
gabungkan dengan beberapa PR (terima kasih!)
menambahkan:
Selesaikan lokal
tetap:
lokal Swedia
lokal Italia yang diperbarui
menambahkan:
format khusus untuk en_US
tandai untuk memuat lokal serupa
memperbaiki masalah petunjuk ketik
tetap:
format waktu relatif tidak ada
izinkan unixtime 9 digit
memperbaiki RFC2822 sebagai format yang valid
waktu relatif tetap
menambahkan lokal Norwegia
perbaikan dan penambahan lokal (lihat penerapan untuk 22.11.2018)
tetap:
Lokal Occitan
tetap:
Masalah lokal Rusia
menambahkan:
Portugis (pt_PT)
tetap:
Pesanan hari kerja lokal Hongaria
menambahkan:
izinkan inisialisasi Momen dengan stempel waktu unix tanpa awalan @
tetap:
Perbaiki format 'LLL' dalam Format Kustom
tetap:
menghapus sintaks hanya php5.4+
tetap:
Kasus yang benar pada nama hari dan bulan Denmark
lokal Perancis
PHPDoks
menambahkan:
consts untuk NO_TZ_MYSQL
, NO_TZ_NO_SECS
dan NO_TIME
saat menguraikan tanggal
menambahkan:
Format khusus Belanda
tetap:
lokal Rusia
menambahkan:
lokal Turki
tetap:
Lokal Lengadocian
tetap:
PHP7.1 setTime membutuhkan $microseconds
menambahkan:
Lokal Ukraina
menambahkan:
Lokal Hongaria
tetap:
Lokal Lengadocian
menambahkan:
lokal Vietnam
Lokal Lengadocian
menambahkan:
Ubah zona waktu default
tetap:
Dokumen FormatInterface
menambahkan:
lokal Arab
Format khusus pada tingkat lokal
tetap:
lokal Rusia
menambahkan:
Tes lokal Rusia
tetap:
lokal Polandia
Perhitungan detik
tetap:
Bahasa Rusia: perbaikan waktu yang lebih relatif
tetap:
Waktu relatif lokal Rusia: penanganan harian
tetap:
kehilangan penanganan yang tidak dapat diubah
tetap:
Peningkatan lokal Polandia (menambahkan Nominativ)
tetap:
lokal Cina
menambahkan format yang diterima ke README
tetap:
lokal Thailand
menambahkan:
Lokal Katalan
tetap:
Tes lokal Polandia
menambahkan:
lokal Rusia
tetap:
Tes lokal Polandia
menambahkan:
Mode yang tidak dapat diubah
tetap:
lokal Polandia
menambahkan:
lokal Polandia
menambahkan:
lokal Indonesia
menambahkan:
lokal Jepang
tetap:
salah ketik di bahasa Belanda
menambahkan:
lokal Belanda
menambahkan:
lokal Swedia
menambahkan:
Lokal Denmark
tetap:
memperbaiki hari kerja awal/akhir untuk lokal Rumania
tetap:
menambahkan karakter pembatas ke lokal Italia
tetap:
meneruskan kembali instance baru untuk startOf/endOf untuk minggu, bulan, kuartal
menambahkan:
lokal Ceko
menambahkan:
lokal calendar
menerima sebagai Penutupan function(Moment $m) {}
lokal relativeTime
menerima sebagai Penutupan function($count, $direction, Moment $m) {}
menambahkan:
memperbaiki penutupan yang lewat ke lokal (kalender, waktu relatif)
atur informasi lokal Jerman yang benar
menambahkan:
memperbaiki string lokal Thailand
menambahkan:
lokal Cina tradisional
menambahkan:
lokal Cina
pemformat ordinal sekarang menerima token
, misalnya token dalam dS
adalah d
diperbaiki: masalah ordinal bahasa Inggris untuk angka antara 11 - 13
menambahkan: lokal Italia
diperbaiki: masalah ordinal bahasa Inggris
menambahkan: bahasa Portugis lokal
tetap:
Lokal menampilkan nama bulan yang salah (#34)
Mengubah urutan hari kerja dalam file lokal
menambahkan:
dapatkanWeekdayNameLong()
dapatkanWeekdayNameShort()
dapatkanBulanNamaPanjang()
dapatkanNamaBulanPendek()
menambahkan:
Lokal: Thailand
menambahkan:
dapatkan Bulan()
dapatkanTahun()
dapatkan Relatif()
Lokal
MomenDariVo:
tetap:
getSeconds() sekarang menunjukkan arah juga
MomenDariVo:
tetap:
masalah zona waktu yang terjadi hanya untuk tanggal unixtime
lainnya:
arah kembali sekarang: "masa depan" (-) / "masa lalu" (+)
nilai waktu sekarang diketik sebagai float
MomenDariVo:
tetap:
zona waktu yang tidak dikenali saat membuat Momen
menambahkan:
getMomentsByWeekdays()
dapatkan hari kerja()
dapatkanMingguDariTahun()
lainnya:
teks lolos
menambahkan:
misal [Hello World]
akan otomatis berubah menjadi Hello World
misalnya WS
untuk minggu ke-21 tahun ini menunjukkan sekarang 21th
yang benar, dll.
mendapatkan periode untuk kuartal tertentu pada tahun tertentu
week
= minggu dalam setahun
month
= bulan dalam setahun
quarter
= kuartal dalam setahun
buat momen baru yang bisa berubah berdasarkan contoh yang diberikan
startOf dan endOf seperti yang diterapkan oleh moment.js
mendapatkan periode kuartal pada tanggal tertentu
setHari()
dapatkan hari()
setBulan()
dapatkan Bulan()
setTahun()
dapatkanTahun()
dapatkan Kuartal()
setKedua()
dapatkanKedua()
setMenit()
dapatkanMenit()
setJam()
dapatkanJam()
menambahkan kloning()
menambahkan getInterval()
ke MomentPeriodVo
untuk menunjukkan interval periode tertentu
menambahkan kelas statis MomentHelper
memperbaiki perhitungan ordinal internal PHP (juga dikombinasikan dengan format moment.js)
Anda sekarang dapat keluar dari teks dengan membungkusnya dalam []
DIHAPUS:
menambahkan()
mengurangi()
menambahkan:
format kalender seperti yang diterapkan oleh moment.js
tetap:
ketidakcocokan dengan PHP 5.3
menambahkan:
tes tanggal dengan format YYYY-mm-dd
dan YYYY-mm-ddTHH:ii:ss
melempar MomentException pada tanggal yang tidak valid
Pengecualian dilempar sebagai MomentException
Validasi tanggal pada instantiasi:
tambahkan Detik()
tambahkanMenit()
tambahkanJam()
tambahkan hari()
tambahkanMinggu()
tambahkan Bulan()
tambahkanTahun()
kurangi Detik()
kurangi menit()
kurangiJam()
kurangiHari()
kurangiMinggu()
kurangi Bulan()
kurangiTahun()
tidak digunakan lagi:
menambahkan()
mengurangi()
Pengelola proyek ini menyarankan untuk mengikuti panduan kontribusi.
Moment.php dapat didistribusikan secara bebas berdasarkan ketentuan lisensi MIT.
Hak Cipta (c) 2017 Tino Ehrich
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.