पल-पल - कल, आज और कल


115

मुझे moment().fromNow()कार्यक्षमता पसंद है , लेकिन जब तारीख करीब होती है यह बहुत सटीक है - पूर्व। मैं इसे '3 घंटे' में नहीं दिखाना चाहता, लेकिन 'आज' - इसलिए मूल रूप से 'दैनिक' परिशुद्धता के साथ।

मैंने moment().calendar()फ़ंक्शन का उपयोग करने की कोशिश की , यह प्रारूपित नहीं है यदि दिनांक अंतर 1 दिन से अधिक है

जवाबों:


119

आज और कल और कल की तारीख पाने के लिए भी आप ऐसा कर सकते हैं

let today     = moment();

let tomorrow  = moment().add(1,'days');

let yesterday = moment().add(-1, 'days');

यह आधिकारिक एपीआई में नहीं है! कृपया इसके लिए आपके पास मौजूद पॉलीफ़िल प्रदान करें
खालिद अल-अंसारी

देखने के लिए यहाँ डॉक्स momentjs.com/docs/#/manipulating/add केवल एक चीज मैं जोड़ने है new Date()एक lib चेतावनी मुझे दे रहता है से बचने के लिए (देखें momentjs.com/docs/#/parsing/now )
HussienK

8
डाउन वोट के लिए खेद है, लेकिन यह वह नहीं है जो मैंने पूछा था। मुझे आश्चर्य है कि यह शीर्ष मतदान का जवाब है (लेखन के समय) ...
ज़ियारनो

8
यह सच है, मैंने इसे वास्तव में अपने लिए और दूसरों के लिए एक संदर्भ के रूप में जोड़ा है जो इस सवाल के शीर्षक को वाक्यांशबद्ध करने के कारण यहां समाप्त हो सकते हैं। ऐसा लगता है कि इसने बहुत से लोगों की मदद की, जिससे मैं खुश हूं। :)
हसिएनके

2
है new Date()आवश्यक है? मैंने सोचा कि moment()आज की तारीख का उपयोग करके किसी भी क्षण का एक उदाहरण उत्पन्न हो सकता है
क्रेग माइल्स

37

आप उस तरीके को कस्टमाइज़ कर सकते हैं जो .fromNowऔर .calendarविधियों दोनों का उपयोग करके दिनांक प्रदर्शित करता है moment.updateLocale। निम्नलिखित कोड .calendarप्रश्न के अनुसार प्रदर्शित होने वाले तरीके को बदल देगा :

moment.updateLocale('en', {
    calendar : {
        lastDay : '[Yesterday]',
        sameDay : '[Today]',
        nextDay : '[Tomorrow]',
        lastWeek : '[Last] dddd',
        nextWeek : '[Next] dddd',
        sameElse : 'L'
    }
});

प्रश्न के आधार पर, ऐसा लगता है कि .calendarविधि अधिक उपयुक्त होगी - .fromNowएक पूर्व / वर्तमान उपसर्ग / प्रत्यय रखना चाहता है, लेकिन यदि आप अधिक जानना चाहते हैं तो आप http://momentjs.com पर प्रलेखन पढ़ सकते हैं / डॉक्स / # / अनुकूलन / रिश्तेदार-समय /

स्थानों को अधिलेखित करने के बजाय केवल एक ही स्थान पर इसका उपयोग करने के लिए, अपनी पसंद की एक स्ट्रिंग को पहले तर्क के रूप में पास करें जब आप इसे परिभाषित करते हैं moment.updateLocaleऔर फिर उस स्थान का उपयोग करके कैलेंडर विधि लागू करते हैं (जैसे। moment.updateLocale('yesterday-today').calendar( /* moment() or whatever */ ))

संपादित करें: क्षण ^ 2.12.0 में अब updateLocaleविधि है। updateLocaleऔर localeकार्यात्मक रूप से समान दिखाई देते हैं, और localeअभी तक पदावनत नहीं किया गया है, लेकिन नए तरीके का उपयोग करने के लिए उत्तर को अपडेट किया गया है।


1
यह वैश्विक स्थानीयकरण को बदल देता है, मुझे सिर्फ 1 जगह पर इसकी आवश्यकता है :)
ज़ियारनो

देखें संपादित करें - आप मौजूदा स्थानों को अधिलेखित करने के बजाय कस्टम लोकेशन बना सकते हैं
svangordon

35

मैं के संयोजन का उपयोग add()और endOf()पल के साथ

//...
const today = moment().endOf('day')
const tomorrow = moment().add(1, 'day').endOf('day')

if (date < today) return 'today'
if (date < tomorrow) return 'tomorrow'
return 'later'
//...

21

आवश्यकताएँ:

  • जब तारीख आगे दूर हो, तो मानक moment().fromNow()कार्यक्षमता का उपयोग करें ।
  • जब तारीख है करीब, शो "today", "yesterday", "tomorrow", आदि

उपाय:

// call this function, passing-in your date
function dateToFromNowDaily( myDate ) {

    // get from-now for this date
    var fromNow = moment( myDate ).fromNow();

    // ensure the date is displayed with today and yesterday
    return moment( myDate ).calendar( null, {
        // when the date is closer, specify custom values
        lastWeek: '[Last] dddd',
        lastDay:  '[Yesterday]',
        sameDay:  '[Today]',
        nextDay:  '[Tomorrow]',
        nextWeek: 'dddd',
        // when the date is further away, use from-now functionality             
        sameElse: function () {
            return "[" + fromNow + "]";
        }
    });
}

NB: संस्करण 2.14.0 से, कैलेंडर फ़ंक्शन के प्रारूप तर्क कॉलबैक हो सकते हैं, http://momentjs.com/docs/#/displaying/calendar-time/ देखें ।



11

मेरे पास समान समाधान है, लेकिन स्थानों का उपयोग करने की अनुमति देता है:

    let date = moment(someDate);
    if (moment().diff(date, 'days') >= 1) {
        return date.fromNow(); // '2 days ago' etc.
    }
    return date.calendar().split(' ')[0]; // 'Today', 'yesterday', 'tomorrow'

यह काम करता है, लेकिन यदि आप '> = 1' को '> = 2' के लिए बदलते हैं तो आपको '1 दिन' के बजाय 'कल' स्ट्रिंग मिलेगा।
डोडी

10

2.10.5 पल मंगलाचरण प्रति कैलेंडर उत्पादन प्रारूपों को निर्दिष्ट एक अधिक विस्तृत दस्तावेज़ों की जांच के लिए समर्थन करता है से कैलेंडर - पल

**Moment 2.10.5**
moment().calendar(null, {
  sameDay: '[Today]',
  nextDay: '[Tomorrow]',
  nextWeek: 'dddd',
  lastDay: '[Yesterday]',
  lastWeek: '[Last] dddd',
  sameElse: 'DD/MM/YYYY'
});

2.14.0 कैलेंडर से मूल्यों को वापस करने के लिए कॉलबैक भी ले सकता है।

**Moment 2.14.0**
    moment().calendar(null, {
     sameDay: function (now) {
       if (this.isBefore(now)) {
         return '[Will Happen Today]';
       } else {
        return '[Happened Today]';
       }
       /* ... */
      }
    });

डाउनवोट्स क्यों? मुझे बताएं ताकि मैं इस ans में सुधार कर
सकूं

यह उत्तर है।
ऑक्टार्टज

मुझे लगता है कि यह सही उत्तर है। लेकिन यह अभी भी "3 दिन पहले" नहीं लौटा है "टाइप परिणाम जब तक कि अत्यधिक अनुकूलित नहीं किया जाता है
Zortext

9

Moment.js में, () विधि की दैनिक सटीकता है जिसे आप देख रहे हैं:

var today = new Date();
var tomorrow = new Date();
var yesterday = new Date();
tomorrow.setDate(today.getDate()+1);
yesterday.setDate(today.getDate()-1);

moment(today).from(moment(yesterday)); // "in a day"
moment(today).from(moment(tomorrow)); // "a day ago" 

moment(yesterday).from(moment(tomorrow)); // "2 days ago" 
moment(tomorrow).from(moment(yesterday)); // "in 2 days"

2
धन्यवाद, लेकिन यह अभी भी 'आज' प्रदर्शित नहीं करता है, और पूर्व प्रदर्शित करता है। '1 दिन पहले' के बजाय 'कल' - कार्यक्षमता की तरह लग रहा है कि मैं कस्टम की जरूरत है
Ziarno

1
fromवास्तव में दैनिक परिशुद्धता नहीं है। उदाहरण के लिए, यदि कल चार घंटे पहले था और मैं पांच घंटे पहले एक समय चुनता हूं, तो वह कल के बजाय "5 घंटे पहले" कहेगा। इस समाधान का सटीकता के साथ कोई लेना-देना नहीं है from, लेकिन तारीखों में पास हो गया है।
माइकल मिओ

5

तो मैंने यही किया

var dateText = moment(someDate).from(new Date());
var startOfToday = moment().startOf('day');
var startOfDate = moment(someDate).startOf('day');
var daysDiff = startOfDate.diff(startOfToday, 'days');
var days = {
  '0': 'today',
  '-1': 'yesterday',
  '1': 'tomorrow'
};

if (Math.abs(daysDiff) <= 1) {
  dateText = days[daysDiff];
}

मेरे पास एक ही समस्या है, लेकिन मुझे i18n को लागू करने की आवश्यकता है, और मेरे पास 10 भाषाएं हैं ... इसलिए मैं पल भर में भरोसा कर रहा था। अंतर्राष्ट्रीयकरण ...
चेक्सपीर

3

आप कल और कल की तारीख पाने के लिए .add () और .subtract () पद्धति का उपयोग कर सकते हैं। तब केवल दिनांक .format ("D / M / Y"), D स्टैंड फॉर डे, M फॉर मंथ, Y टू ईयर प्राप्त करने के लिए प्रारूप विधि का उपयोग करें। मोमेंट डॉक्स में जाँच करें

 let currentMilli = Date.now()
 let today = Moment(currentMilli).format("D/M/Y");
 let tomorrow = Moment(currentMilli).add(1, 'days').format("D/M/Y");
 let yesterday = Moment(currentMilli).subtract(1, 'days').format("D/M/Y");

परिणाम होगा:

Current Milli - 1576693800000
today - 19/12/2019
tomorrow - 18/12/2019
yesterday - 18/12/2019

3

यहाँ मैं उस पल का उपयोग कर रहा हूँ :

  let today = moment().format('DD MMMM YYYY');

  let tomorrow = moment().add(1, 'days').format('DD MMMM YYYY').toString();

  let yesterday = moment().subtract(1, 'days').startOf('day').format('DD MMMM YYYY').toString();

1
const date = moment(YOUR_DATE)
return (moment().diff(date, 'days') >= 2) ? date.fromNow() : date.calendar().split(' ')[0]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.