Format plugin untuk objek Durasi Momen.
Ini adalah plugin ke perpustakaan tanggal JavaScript Moment.js untuk menambahkan pemformatan komprehensif ke Durasi Momen.
Tata bahasa templat format berpola pada tata bahasa templat Tanggal Momen yang sudah ada, dengan sedikit modifikasi karena durasi pada dasarnya berbeda dengan tanggal.
Plugin ini tidak memiliki dependensi apa pun selain Moment.js itu sendiri, dan dapat digunakan di browser dan di Node.js.
Jika tersedia dan berfungsi, plugin ini menggunakan Intl.NumberFormat#format
atau Number#toLocaleString
untuk merender keluaran numerik yang diformat. Sayangnya, banyak lingkungan yang tidak sepenuhnya menerapkan rangkaian opsi lengkap dalam spesifikasinya masing-masing, dan beberapa menyediakan implementasi yang bermasalah.
Plugin ini menjalankan pengujian fitur untuk setiap pemformat, dan akan kembali ke fungsi cadangan untuk merender keluaran numerik yang diformat jika pengujian fitur gagal. Untuk memaksa plugin ini agar selalu menggunakan fungsi format angka cadangan, setel useToLocaleString
ke false
. Output fungsi format angka cadangan dapat dilokalkan menggunakan opsi yang dirinci di bagian bawah halaman ini. Secara umum, Anda harus menentukan opsi pemformatan nomor cadangan jika pemformatan lokal "en"
default tidak dapat diterima di beberapa perangkat atau di beberapa lingkungan.
Plugin ini diuji menggunakan BrowserStack pada berbagai perangkat Android dengan versi OS dari 2.2 hingga 7, dan pada berbagai perangkat iOS dengan versi OS dari 4.3 hingga 11. Juga diuji pada browser Chrome, Firefox, IE 8-11, dan Edge .
Silakan ajukan masalah jika Anda melihat masalah pemformatan atau anomali di lingkungan mana pun!
Beberapa item tersisa untuk menyelesaikan Versi 2:
Tambahkan definisi tipe untuk mendukung TypeScript, publikasikan paket NuGet, dan dukung opsi pengemasan lain apa pun yang digunakan saat ini.
Pengujian plugin harus dimodernisasi, idealnya agar sesuai dengan pengaturan pengujian Moment.js.
Setelah mengimplementasikan plugin format durasi momen versi 2, ada beberapa perbaikan nyata untuk versi 3.
Ide-ide di bawah ini dicatat sebagai masalah dan ditandai dengan pencapaian 3.0.0. Jika Anda mempunyai ide atau komentar tentang apa yang ingin Anda lihat, silakan catat masalah pada proyek ini!
Opsi pelokalan pemformatan angka cadangan harus disertakan dengan ekstensi objek Lokal Momen yang sudah ditambahkan plugin ini untuk melokalkan label unit durasi. Ini akan menempatkan semua konfigurasi pelokalan di satu tempat.
format durasi momen dan fungsi pemformatan angka cadangannya tidak mengikuti API yang sama dengan Number#toLocaleString
untuk digit signifikan dan digit fraksi. Fungsi fallback harus diperbarui untuk menggunakan toLocaleString
API, dan plugin harus mengekspos opsi API secara langsung daripada menyembunyikan beberapa opsi dan menutupinya di balik opsi precision
dan useSignificantDigits
.
Mengekspos fungsi pemformatan angka cadangan serta fungsi pengujian fitur pemformat akan memfasilitasi pengujian dan memungkinkannya digunakan di luar konteks durasi pemformatan.
Plugin ini bergantung pada moment.js, yang tidak ditentukan sebagai ketergantungan paket dalam versi yang saat ini diterbitkan.
Node.js
npm install moment-duration-format
Punjung
bower install moment-duration-format
Peramban
<script src="path/to/moment-duration-format.js"></script>
Plugin ini akan selalu mencoba menginstal dirinya sendiri pada instance root.moment
, jika ada.
Plugin ini akan menginstal fungsi pengaturannya ke root.momentDurationFormatSetup
sehingga nantinya dapat dipanggil kapan saja.
Saat menggunakan plugin ini di browser, jika Anda tidak menyertakan moment.js di halaman Anda terlebih dahulu, Anda perlu memanggil window.momentDurationFormatSetup
secara manual pada instance momen Anda setelah dibuat.
Untuk menggunakan plugin ini sebagai modul, gunakan fungsi require
.
var moment = require ( "moment" ) ;
var momentDurationFormatSetup = require ( "moment-duration-format" ) ;
Plugin mengekspor fungsi init sehingga format durasi dapat diinisialisasi pada instance momen lainnya.
Untuk menggunakan plugin ini dengan paket moment.js lainnya, misalnya moment-timezone
, panggil fungsi pengaturan yang diekspor secara manual untuk menginstal plugin ke dalam paket yang diinginkan.
var moment = require ( "moment-timezone" ) ;
var momentDurationFormatSetup = require ( "moment-duration-format" ) ;
momentDurationFormatSetup ( moment ) ;
typeof moment . duration . fn . format === "function" ;
// true
typeof moment . duration . format === "function" ;
// true
moment . duration . fn . format
Metode duration.fn.format
dapat memformat durasi momen apa pun. Jika tidak ada template atau argumen lain yang diberikan, fungsi template default akan menghasilkan string template berdasarkan nilai durasi.
moment . duration ( 123 , "minutes" ) . format ( ) ;
// "2:03:00"
moment . duration ( 123 , "months" ) . format ( ) ;
// "10 years, 3 months"
Metode format durasi dapat dipanggil dengan tiga argumen opsional, dan mengembalikan string yang diformat.
moment . duration ( value , units ) . format ( [ template ] [ , precision ] [ , settings ] )
// formattedString
moment . duration . format
Metode duration.format
memungkinkan pemformatan terkoordinasi dari beberapa durasi momen sekaligus. Fungsi ini menerima array durasi sebagai argumen pertamanya, lalu tiga argumen opsional yang sama dengan fungsi duration.fn.format
. Fungsi ini mengembalikan array string yang diformat.
moment . duration . format ( durationsArray , [ template ] [ , precision ] [ , settings ] ) ;
// formattedStringsArray
Semua opsi yang tersedia pada fungsi format durasi tunggal dapat digunakan dengan fungsi format durasi ganda. Objek pengaturan tunggal digunakan untuk memformat masing-masing durasi.
moment . duration . format ( [
moment . duration ( 1 , "second" ) ,
moment . duration ( 1 , "minute" ) ,
moment . duration ( 1 , "hour" )
] , "d [days] hh:mm:ss" ) ;
// ["0:00:01", "0:01:00", "1:00:00"]
Durasi yang tidak valid dianggap memiliki nilai 0
untuk pemformatan.
var invalidDuration = moment . duration ( NaN , "second" ) ;
invalidDuration . isValid ( ) ;
// false
invalidDuration . format ( ) ;
// "0 seconds"
template
(string|fungsi) adalah string yang digunakan untuk membuat keluaran yang diformat, atau fungsi yang mengembalikan string untuk digunakan sebagai templat format.
moment . duration ( 123 , "minutes" ) . format ( "h:mm" ) ;
// "2:03"
String templat diurai untuk karakter token momen, yang diganti dengan nilai durasi untuk setiap jenis unit. Token momennya adalah:
years: Y or y
months: M
weeks: W or w
days: D or d
hours: H or h
minutes: m
seconds: s
ms: S
Keluarkan karakter token dalam string templat menggunakan tanda kurung siku.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs], m [min]" ) ;
// "2 hrs, 3 mins"
Untuk beberapa format durasi waktu, nilai dengan bantalan nol diperlukan. Gunakan beberapa karakter token secara bersamaan untuk membuat jumlah padding yang tepat.
moment . duration ( 3661 , "seconds" ) . format ( "h:mm:ss" ) ;
// "1:01:01"
moment . duration ( 15 , "seconds" ) . format ( "sss [s]" ) ;
// "015 s"
Saat templat format dipangkas, panjang token pada token yang dirender dengan magnitudo terbesar juga dapat dipangkas. Lihat bagian trim dan forceLength di bawah untuk lebih jelasnya.
moment . duration ( 123 , "seconds" ) . format ( "h:mm:ss" ) ;
// "2:03"
Panjang token 2
untuk milidetik adalah kasus khusus, kemungkinan besar digunakan untuk merender milidetik sebagai bagian dari keluaran pengatur waktu, seperti mm:ss:SS
. Dalam hal ini, nilai milidetik diisi menjadi tiga digit, lalu dipotong dari kiri untuk menghasilkan keluaran dua digit.
moment . duration ( 9 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:00"
moment . duration ( 10 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:01"
moment . duration ( 999 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:99"
moment . duration ( 1011 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:01:01"
Token dapat muncul beberapa kali dalam templat format, namun semua instance harus memiliki panjang yang sama. Jika tidak, semua instance akan dirender sepanjang token pertama dari jenis tersebut.
moment . duration ( 15 , "seconds" ) . format ( "ssss sss ss s" ) ;
// "0015 0015 0015 0015"
moment . duration ( 15 , "seconds" ) . format ( "s ss sss ssss" ) ;
// "15 15 15 15"
Fungsi template default mencoba memformat durasi berdasarkan besarnya. Semakin besar nilai durasinya, maka semakin besar pula unit output yang diformat.
Untuk beberapa nilai durasi, fungsi template default akan trim
secara default menjadi "both"
jika opsi tersebut tidak disetel di objek pengaturan (selengkapnya di bawah).
Fungsi templat default menggunakan label unit yang dilokalkan secara otomatis (lebih lanjut juga akan dijelaskan di bawah).
moment . duration ( 100 , "milliseconds" ) . format ( ) ;
// "100 milliseconds"
moment . duration ( 100 , "seconds" ) . format ( ) ;
// "1:40"
moment . duration ( 100 , "days" ) . format ( ) ;
// "3 months, 9 days"
moment . duration ( 100 , "weeks" ) . format ( ) ;
// "1 year, 10 months, 30 days"
moment . duration ( 100 , "months" ) . format ( ) ;
// "8 years, 4 months"
Gunakan fungsi templat khusus jika Anda memerlukan kontrol runtime atas string templat. Fungsi templat dijalankan dengan pengikatan this
pada objek pengaturan, dan memiliki akses ke objek durasi yang mendasarinya melalui this.duration
. Pengaturan apa pun dapat diakses atau diubah oleh fungsi templat.
Fungsi templat khusus ini menggunakan templat berbeda berdasarkan nilai durasinya:
function customTemplate ( ) {
return this . duration . asSeconds ( ) >= 86400 ? "w [weeks], d [days]" : "hh:mm:ss" ;
}
moment . duration ( 65 , 'seconds' ) . format ( customTemplate , {
trim : false
} ) ;
// "00:01:05"
moment . duration ( 1347840 , 'seconds' ) . format ( customTemplate , {
trim : false
} ) ;
// "2 weeks, 2 days"
Untuk memastikan keluaran berformat mudah digunakan, karakter tanda baca dipangkas dari awal dan akhir keluaran yang diformat. Khususnya, periode awal dan akhir .
, koma ,
, titik dua :
, dan spasi
karakter dihapus.
precision
(angka) menentukan jumlah pecahan desimal atau digit bilangan bulat yang akan ditampilkan untuk nilai akhir.
Nilai presisi default adalah 0
.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs]" ) ;
// "2 hrs"
Presisi positif menentukan jumlah digit pecahan desimal yang akan ditampilkan.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs]" , 2 ) ;
// "2.05 hrs"
Presisi negatif menentukan jumlah digit bilangan bulat yang akan dipotong menjadi nol.
moment . duration ( 223 , "minutes" ) . format ( "m [min]" , - 2 ) ;
// "200 mins"
settings
adalah objek yang dapat mengesampingkan opsi format durasi momen default mana pun.
Argumen template
dan precision
dapat ditentukan sebagai properti dari argumen objek settings
tunggal, atau keduanya dapat diteruskan secara terpisah bersama dengan objek pengaturan opsional.
moment . duration ( 123 , "minutes" ) . format ( {
template : "h [hrs]" ,
precision : 2
} ) ;
// "2.05 hrs"
Perilaku trim
default adalah "large"
.
Token dengan magnitudo terbesar secara otomatis dipangkas ketika tidak memiliki nilai.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" ) ;
// "2:03:00"
Pemangkasan juga berfungsi ketika format string diorientasikan dengan besaran token meningkat dari kiri ke kanan.
moment . duration ( 123 , "minutes" ) . format ( "s [seconds], m [minutes], h [hours], d [days]" ) ;
// "0 seconds, 3 minutes, 2 hours"
Untuk menghentikan pemangkasan sama sekali, setel { trim: false }
.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : false
} ) ;
// "0d 2:03:00"
Saat memformat beberapa durasi menggunakan moment.duration.format
, pemangkasan untuk semua durasi dikoordinasikan pada gabungan kumpulan durasi.
moment . duration . format ( [
moment . duration ( 1 , "minute" ) ,
moment . duration ( 1 , "hour" ) ,
moment . duration ( 1 , "day" )
] , "y [years], w [weeks], d [days], h [hours], m [minutes]" ) ;
// [
// "0 days, 0 hours, 1 minute",
// "0 days, 1 hour, 0 minutes",
// "1 day, 0 hours, 0 minutes"
// ]
trim
dapat berupa string, daftar string yang dibatasi, array string, atau boolean. Nilai yang diterima adalah sebagai berikut:
"large"
Pangkas token bernilai nol dengan magnitudo terbesar hingga menemukan token dengan nilai, token yang diidentifikasi sebagai stopTrim
, atau token terakhir dari string format. Ini adalah nilai trim
default.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" ) ;
// "2:03:00"
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large"
} ) ;
// "2:03:00"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large"
} ) ;
// "0"
"small"
Pangkas token bernilai nol dengan magnitudo terkecil hingga menemukan token dengan nilai, token yang diidentifikasi sebagai stopTrim
, atau token terakhir dari string format.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small"
} ) ;
// "0d 2:03"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small"
} ) ;
// "0d"
"both"
Jalankan trim "large"
lalu trim "small"
.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both"
} ) ;
// "2h 3m"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both"
} ) ;
// "0s"
"mid"
Pangkas token bernilai nol yang bukan merupakan token pertama atau terakhir. Biasanya digunakan bersamaan dengan "large"
atau "both"
. misalnya "large mid"
atau "both mid"
.
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "mid"
} ) ;
// "0w 1d 1m 0s"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "large mid"
} ) ;
// "1d 1m 0s"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "small mid"
} ) ;
// "0w 1d 1m"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "both mid"
} ) ;
// "1d 1m"
moment . duration ( 0 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "both mid"
} ) ;
// "0s"
"final"
Pangkas token terakhir jika nilainya nol. Gunakan opsi ini dengan "large"
atau "both"
untuk menampilkan string kosong saat memformat durasi nilai nol. misalnya "large final"
atau "both final"
.
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large final"
} ) ;
// ""
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small final"
} ) ;
// ""
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both final"
} ) ;
// ""
"all"
Pangkas semua token yang bernilai nol. Singkatan dari "both mid final"
.
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "all"
} ) ;
// ""
"left"
Dipetakan ke "large"
untuk mendukung API versi 1 plugin ini.
"right"
Dipetakan ke "large"
untuk mendukung API versi 1 plugin ini.
true
Memetakan ke "large"
.
null
Memetakan ke "large"
.
false
Menonaktifkan pemangkasan.
Tetapkan largest
ke bilangan bulat positif untuk menghasilkan hanya n
token momen berkekuatan terbesar, dimulai dengan token berkekuatan terbesar yang memiliki nilai.
Menggunakan opsi largest
, default trim
ke "all"
.
moment . duration ( 7322 , "seconds" ) . format ( "d [days], h [hours], m [minutes], s [seconds]" , {
largest : 2
} ) ;
// "2 hours, 2 minutes"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3
} ) ;
// "2 weeks, 2 hours"
Menyetel trim
ke nilai yang berbeda, atau menggunakan stopTrim
dapat mengubah token awal serta keluaran yang tersisa.
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3 ,
trim : "both"
} ) ;
// "2 weeks, 0 days, 2 hours"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3 ,
trim : "both" ,
stopTrim : "m"
} ) ;
// "2 weeks, 0 days, 2 hours"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 4 ,
trim : false