<p>moment().fromNow() "beberapa detik yang lalu"</p>

Dibuat pada 6 Des 2012  ·  19Komentar  ·  Sumber: moment/moment

moment().fromNow() mengembalikan "beberapa detik yang lalu".
Mengapa tidak "sekarang"?

New Feature

Komentar yang paling membantu

Anda dapat menyesuaikannya dengan melakukan sesuatu seperti moment.langData('en').relativeTime.s = "just now" , meskipun akan terlihat aneh dengan sufiks.

Jika mau, Anda dapat membuat metode yang membungkus fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Semua 19 komentar

Anda dapat menyesuaikannya dengan melakukan sesuatu seperti moment.langData('en').relativeTime.s = "just now" , meskipun akan terlihat aneh dengan sufiks.

Jika mau, Anda dapat membuat metode yang membungkus fromNow .

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

Terima kasih Tim!

Terima kasih untuk kodenya. Saya baik-baik saja dengan "beberapa detik yang lalu", tetapi saya sering juga mendapatkan "dalam beberapa detik" setelah menyelesaikan operasi karena jam server dan klien tidak sinkron. Jadi saya bertanya-tanya apakah tidak masuk akal untuk menunjukkan "baru saja" dalam kedua kasus?

Ya, kode di atas menunjukkan "baru saja" jika 1 detik sebelum atau sesudah waktu saat ini, jadi jika Anda ingin meningkatkan rentang itu, Anda cukup mengubah jumlah milidetik.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 25000) { // 25 seconds before or after now
        return 'just now';
    }
    return this.fromNow(a);
}

Terima kasih, saya mengerti, tetapi bertanya-tanya apakah masuk akal untuk 'baru saja' menjadi perilaku default, mengingat melihat "dalam beberapa detik" untuk acara sebelumnya terlihat seperti bug bagi sebagian besar pengguna.

+1 untuk 'baru saja' menjadi perilaku default!

Nah, jika jam Anda tidak sinkron, Anda memiliki masalah. Saya tidak berpikir tempat yang tepat untuk memperbaikinya adalah metode memanusiakan momen. Ini adalah perpustakaan waktu, Anda menyuruhnya untuk menampilkan waktu di masa depan, dan ia melakukannya.

Jika Anda ingin mengubah string "beberapa detik yang lalu" dengan "baru saja", tetapi biarkan "dalam beberapa detik" itu adalah hal yang berbeda. Itu juga akan membutuhkan perbaikan semua terjemahan ;-)

moment.langData('en').relativeTime.s = "tidak pernah"; adalah koreksi untuk masalah saya #555

Terima kasih Tim!

Jam hampir selalu akan sedikit tidak sinkron saat mem-parsing stempel waktu yang dibuat server di browser. Apakah ini kasus penggunaan yang langka untuk moment.js?

Saya pikir menambahkan nilai epsilon beberapa detik, sehingga interval yang lebih kecil dari itu ke segala arah akan menghasilkan "baru saja" atau serupa masuk akal, dan jika nilai ini mudah diubah itu dapat sesuai dengan harapan semua orang - nilai 0 berarti perilaku saat ini , nilai lebih besar dari nol adalah untuk melawan browser/server offset atau serupa.

Bagaimana menurutmu?

"Nilai epsilon" yang dapat dikonfigurasi terdengar seperti ide yang bagus.

Saya pikir solusi yang lebih sederhana untuk masalah @ejain adalah mengatur momen sebelum menampilkannya. Anda biasanya harus tahu apakah operasi itu mungkin terjadi di masa depan.

var now = moment();
var mom = momentFromServer < now ? now : momentFromServer;
mom.fromNow(); //=> a few seconds ago

Jika ini perlu menjadi bagian dari Momen, saran saya adalah menjadikannya argumen boolean untuk fromNow() . Atau lebih baik lagi, biarkan fromNow mengambil objek opsi (kompatibel terbalik), seperti fromNow({withSuffix: false, forcePast: true}) .

@icambron : solusi bagus, jika Anda yakin tidak memiliki momen masa depan yang valid.

@timrwood terima kasih atas tipsnya

sebenarnya moment.langData('en')._relativeTime.s = "just now" jika Anda ingin mengganti string tersebut.

Saya memanusiakan tanggal (tanpa informasi waktu), jadi mengubah _relativeTime.s menjadi setara dengan "hari ini" untuk semua lokal adalah solusi saya.

fromNow(true) mengembalikan "2 menit yang lalu", "2 jam yang lalu", "beberapa detik yang lalu".
Bagaimana Anda bisa melakukan sesuatu seperti "2m" atau "2h" atau "2s" atau "2d"?.

@puneet94 Anda dapat memperbarui string lokal Anda dengan https://momentjs.com/docs/#/customization/relative -time/

FWIW, saya dapat menerapkan "baru saja" menggunakan 2.12.0 dengan menentukan fungsi untuk past :

moment.updateLocale('en', {
    relativeTime : {
        past: function(input) {
          return input === 'just now'
            ? input
            : input + ' ago'
        },
        s  : 'just now',
        future: "in %s",
        ss : '%d seconds',
        m:  "a minute",
        mm: "%d minutes",
        h:  "an hour",
        hh: "%d hours",
        d:  "a day",
        dd: "%d days",
        M:  "a month",
        MM: "%d months",
        y:  "a year",
        yy: "%d years"
    }
});

@richardszalay format tanggal apa yang Anda gunakan dengan ini dan bagaimana Anda menerapkan ini?
Saya memiliki string tanggal waktu = 1560955417474,
dan ingin menampilkannya dalam tag teks
<Text>{time}</Text>

Apakah halaman ini membantu?
0 / 5 - 0 peringkat