মুহুর্ত.জেএস - আগামীকাল, আজ এবং গতকাল


115

আমি moment().fromNow()কার্যকারিতাটি পছন্দ করতে চাই , তবে তারিখটি কাছাকাছি এলে খুব সুনির্দিষ্ট - প্রাক্তন। আমি এটি 'ঘন্টার মধ্যে' প্রদর্শন করতে চাই না তবে 'আজ' - তাই মূলত একটি 'দৈনিক' নির্ভুলতার সাথে।

আমি 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()একটি সতর্কতা এড়ানো যে লিব আমাকে দেয় তা অব্যাহত রাখুন ( momentjs.com/docs/#/parsing/ હવે দেখুন )
হুসেনিক

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 */ ))

সম্পাদনা: মুহুর্তের এখন .0 2.12.0 এর updateLocaleপদ্ধতি রয়েছে। updateLocaleএবং localeকার্যত একইরূপে প্রদর্শিত হবে এবং localeএখনও অবহেলিত নয়, তবে নতুন পদ্ধতিটি ব্যবহার করার জন্য উত্তরটি আপডেট করেছে।


1
এটি বৈশ্বিক স্থানীয়করণ পরিবর্তন করে, আমার কেবল 1 জায়গায় এটি প্রয়োজন :)
জিয়ারানো

সম্পাদনা দেখুন - আপনি বিদ্যমান লোকেলগুলিকে ওভাররাইট করার পরিবর্তে কাস্টম লোকেলগুলি তৈরি করতে পারেন
সোয়াংর্ডন

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 + "]";
        }
    });
}

এনবি: সংস্করণ ২.১৪.০ থেকে ক্যালেন্ডার ফাংশনের ফরমেটের আর্গুমেন্টটি কলব্যাক হতে পারে, http://momentjs.com/docs/#/displaying/cocolate-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'

এটি কাজ করে, তবে আপনি যদি '> = 2' এর জন্য '> = 1' পরিবর্তন করেন তবে আপনি '1 দিন আগে' পরিবর্তে 'গতকাল' স্ট্রিংটি পাবেন।
ডডি

10

২.১০.৫ মুহুর্ত থেকে অনুরোধ অনুসারে ক্যালেন্ডার আউটপুট ফর্ম্যাটগুলি নির্দিষ্ট করে সমর্থন করে আরও বিশদ ডকুমেন্টেশনের জন্য মোমেন্ট - ক্যালেন্ডার চেক করুন ।

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

২.১৪.০ থেকে ক্যালেন্ডার মানগুলি ফেরত দিতে কলব্যাকও নিতে পারে।

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

ডাউনভোটস কেন? আমাকে জানাতে যাতে আমি এই
উত্তরগুলি

এই উত্তর।
oscarteg

এটি আমার মনে হয় সঠিক উত্তর। তবে এটি অত্যন্ত স্বনির্ধারিত না হলে "3 দিন আগে" টাইপ ফলাফলটি দেয় না
জোরটেক্সট

9

মোমেন্ট.জেজে, থেকে () পদ্ধতির দৈনিক নির্ভুলতা আপনি খুঁজছেন:

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, কিন্তু তারিখ গৃহীত।
মাইকেল Mior

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];
}

আমারও একই সমস্যা আছে, তবে আমার আইআইএনএন প্রয়োগ করা দরকার, এবং আমার 10 টি ভাষা রয়েছে ... তাই আমি মুহুর্তে জেএসএস আন্তর্জাতিকীকরণের উপর নির্ভর করছিলাম ...
চেক্সপির

3

আপনি গতকাল এবং আগামীকাল তারিখ পেতে .add () এবং .subtract () পদ্ধতি ব্যবহার করতে পারেন। তারপরে একমাত্র তারিখের জন্য ফর্ম্যাট পদ্ধতিটি ব্যবহার করুন forma মুহুর্তের ডক্সে চেক করুন

 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]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.