مدیریت تاریخ و زمان با استفاده از Moment.js

Managing Dates Times Using Moment.js

Managing-Dates-Times-Using-Momentjs

کار با تاریخ و زمان در جاوا اسکریپت همیشه کمی دست و پا گیر بوده است. اگر در StackOverflow سوالی مربوط به تاریخ بپرسید، اغلب، پاسخِ «استفاده از Moment.js» را خواهید شنید.

Moment.js چیست؟

Moment.js به شما این امکان را می دهد با استفاده از یک API تمیز و مختصر، تاریخ ها و زمان ها را تجزیه، اعتبارسنجی، دستکاری و نمایش دهید.

Moment.js به صورت رایگان از صفحه اصلی پروژه برای دانلود در دسترس است. Moment.js را می توان از مرورگر و همچنین از داخل یک برنامه Node اجرا کرد. برای استفاده از آن با Node، ماژول را با استفاده از دستور زیر نصب کنید.

npm install moment
const moment = require('moment');
const today = moment();
console.log(today.format());

// 2020-01-09T15:45:51+01:00

به منظور اجرای Moment.js از مرورگر، آن را با استفاده از یک تگ <script>، مانند شکل زیر وارد کنید.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Moment.js</title>
  </head>
  <body>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
    <script>
      // You have a 'moment' global here
      const today = moment();
      console.log(today.format());
    </script>
  </body>
</html>

قالب بندی تاریخ

Moment.js فرآیند تبدیل تاریخ به هر فرمت خاصی را ساده کرده است. همانطور که در مثال زیر نشان داده شده است، تبدیل فرمت تاریخ با Moment ساده است:

moment().format('YYYY-MM-DD');

() moment تاریخ و زمان فعلی را به ما می دهد، در حالی که () format آن را به فرمت مشخص شده تبدیل می کند. این مثال تاریخ را به عنوان یک سال چهار رقمی، به دنبال آن یک خط فاصله، یک ماه دو رقمی، یک خط فاصله دیگر و یک روز دو رقمی فرمت می‌کند.

moment().format("YYYY-MM-DD")

"2022-01-12"

اعتبارسنجی تاریخ

یکی دیگر از کارهای آزاردهنده که Moment.js آن را بسیار ساده کرده است، اعتبارسنجی تاریخ است. برای انجام اعتبارسنجی، کافی است یک رشته تاریخ را به همراه قالب تاریخ موردنظر به شی ()moment ارسال کنید و متد isValid را فراخوانی کنید. اگر تاریخ معتبر باشد، این مقدار true و در غیر این صورت false خواهد شد.

console.log(moment("2020-01-01", "YYYY-MM-DD").isValid()); // true
console.log(moment("not-a-date", "YYYY-MM-DD").isValid()); // false

اما توجه داشته باشید که Moment به شما امکان کار با تاریخ های جزئی را می دهد که ممکن است منجر به نتایج غیرمنتظره شود.

console.log(moment("This year is 2020", "YYYY-MM-DD").isValid());
// Returns true because 2020 matches YYYY

در مثال بالا ما تاریخ در یک جمله وارد کردیم و نتیجه true گرفتیم.

برای جلوگیری از این امر، می توانید Moment را با ارسال true به عنوان آرگومان سوم در حالت تجزیه دقیق قرار دهید.

console.log(moment("2019 was a great year because I got married", "YYYY-MM-DD", true).isValid());
// false

دستکاری تاریخ ها

ما می توانیم روز، ماه، سال و غیره را اضافه یا تفریق کنیم. این از طریق متدهای add و subtract به دست می آید. مثال زیر نشان می دهد که چگونه هفت روز، ماه یا هفته به تاریخ فعلی اضافه می شود.

moment().add(7,"days").format() // 2022-01-19T20:37:32+03:30

moment().add(7,"months").format() // 2022-08-12T20:38:00+04:30

moment().add(7,"years").format() // 2029-01-12T20:38:06+03:30

به طور مشابه، متد subtract در زیر نشان داده شده است.

moment().subtract(7,"days").format() // 2022-01-05T20:39:25+03:30

moment().subtract(7,"months").format() // 2021-06-12T20:39:32+04:30

moment().subtract(7,"years").format() // 2015-01-12T20:39:38+03:30

توجه داشته باشید که هر یک از مثال های بالا شی  را برمی گرداند. اگر یک تاریخ قابل خواندن برای انسان می خواهید، باید آن را بر اساس آن قالب بندی کنید.

const today = moment();
const nextWeek = today.add(7, 'days');
console.log(nextWeek.format('dddd Do MMMM, YYYY'));

// Thursday 16th January, 2020

تعیین مدت زمان بین دو تاریخ

یکی دیگر از کارهای رایج، تعیین مدت زمان بین دو تاریخ است. برای محاسبه زمان از تاریخ جاری، Moment.js از روشی به نام ()fromNow استفاده می کند.

moment('2020.01.01', 'YYYY.MM.DD').fromNow();
// 9 days ago

اگر true را به عنوان آرگومان پاس کنیم، می توانیم مقدار را بدون پسوند دریافت کنیم.

moment('2020.01.01', 'YYYY.MM.DD').fromNow(true);
// 9 days

متد fromNow برای مقایسه زمان با تاریخ جاری استفاده می شود.

متد from دو تاریخ دلخواه را با هم مقایسه می کند.

const dateA = moment('01-01-1900', 'DD-MM-YYYY');
const dateB = moment('01-01-2000', 'DD-MM-YYYY');

console.log(dateA.from(dateB));
100 years ago

محاسبه تفاوت بین تاریخ ها

Moment.js راهی برای محاسبه تفاوت بین دو تاریخ ارائه می دهد. تفاوت به طور پیش فرض بر حسب میلی ثانیه محاسبه می شود، اما می تواند بر حسب روز، ماه، سال و غیره نیز برگردانده شود. برای محاسبه تفاوت، متد ()diff را فراخوانی کنید. این روش یک تاریخ را به عنوان اولین آرگومان خود در نظر می گیرد. واحد زمان را می توان با استفاده از آرگومان دوم اختیاری مشخص کرد.

const dateB = moment('2014-11-11');
const dateC = moment('2014-10-11');

console.log('Difference is ', dateB.diff(dateC), 'milliseconds');
Difference is 2678400000 milliseconds

console.log('Difference is ', dateB.diff(dateC, 'days'), 'days');
Difference is 31 day(s)

console.log('Difference is ', dateB.diff(dateC, 'months'), 'weeks');
Difference is 4 week(s)

console.log('Difference is ', dateB.diff(dateC, 'months'), 'months');
Difference is 1 month(s)



پرس و جوهای تاریخ

Moment.js همچنین روش های مختلف مقایسه تاریخ را ارائه می دهد. این متدها شامل isBefore، isAfter و isSame هستند که همانطور که از نامشان پیداست، یک Boolean برمی گرداند که نشان می دهد یک تاریخ قبل، بعد یا برابر با تاریخ دیگری است یا خیر. مثالی که از isAfter استفاده می کند در زیر نشان داده شده است.

console.log(moment('2020-01-01').isAfter('2019-01-01')); // true
console.log(moment('2020-01-01').isAfter('2020-01-08')); // false

همچنین یک متد isLeapYear وجود دارد که سال های کبیسه را بررسی می کند.

console.log(moment([2020]).isLeapYear()); // true
console.log(moment([2019]).isLeapYear()); // false

پشتیبانی زبان بین المللی

Moment.js پشتیبانی از i18n را ارائه می دهد. این به شما امکان می دهد یک زبان جهانی را اختصاص دهید یا زبان را برای یک شی تنظیم کنید. به طور پیش فرض از زبان انگلیسی پشتیبانی می کند. اگر می خواهید از هر زبان دیگری پشتیبانی کنید، مقادیر کلیدی آن زبان خاص را به moment.locale اختصاص دهید. مثال کوتاه زیر که از مستندات Moment.js گرفته شده است، نشان می‌دهد که چگونه می‌توان برای فرانسوی پشتیبانی اضافه کرد.

const moment = require('moment');

moment.locale('fr', {
  months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
  weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  relativeTime : {
      future : 'dans %s',
      past : 'il y a %s',
      s : 'quelques secondes',
      m : 'une minute',
      mm : '%d minutes',
      h : 'une heure',
      hh : '%d heures',
      d : 'un jour',
      dd : '%d jours',
      M : 'un mois',
      MM : '%d mois',
      y : 'un an',
      yy : '%d ans'
  }
});

moment.locale('fr');

console.log(moment(1316116057189).fromNow());
// il y a une heure

console.log(moment().format('dddd Do MMMM, YYYY'));
// jeudi 9e janvier, 2020

برای اطلاع بشتر می توانید به مستندات کتابخانه مراجعه کنید.


منبع: وب سایت sitepoint

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.