کار با تاریخ در JavaScript

آفلاین
user-avatar
عرفان حشمتی
24 اسفند 1399, خواندن در 15 دقیقه

مدیریت تاریخ و زمان در بسیاری از برنامه‌های جاوا اسکریپتی بسیار مهم است. به همین دلیل JavaScript دارای یک شی Date داخلی برای مدیریت و دستکاری تاریخ‌ها است. اشیا Date شامل اعدادی است که به میلی ثانیه از ژانویه 1970 در گرینویچ نمایش داده می‌شوند.

ما می‌توانیم کارهای زیادی را با شی Date انجام دهیم تا تاریخ‌ها را دستکاری کنیم. این کار مزایای بسیاری دارد اما از طرفی هم ممکن است بعضی عملکردها را دچار مشکل کند. بنابراین در بسیاری از موارد استفاده از کتابخانه‌های شخص ثالث بهتر از کار با اشیا Date داخلی JavaScript است. Moment.js یکی از محبوب‌ترین‌هاست، در نتیجه هنگام انتخاب تاریخ در JavaScript طبیعتا بهترین گزینه است.

شی Date داخلی

برای کار با تاریخ در JavaScript ، باید یک شی جدید ایجاد کنیم. سازنده برای شی date آرگومان‌هایی را می‌گیرد. هنگامی که هیچ آرگومانی وارد نشود، سپس شی Date ایجاد شده تاریخ و زمان فعلی را در منطقه زمانی محلی شما به عنوان نمونه معرفی خواهد کرد.

پارامترهایی که می‌تواند قبول کند شامل یک رشته تاریخ، یک شی date دیگر یا سال‌ها، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه با هم هستند. ما می‌توانیم یک رشته تاریخ را به شرح زیر به سازنده تاریخ منتقل کنیم:

new Date('2019-01-01');

اگر نتیجه را ثبت کنیم، تاریخ و زمان زیر را خواهیم داشت:

‘Mon Dec 31 2018 16:00:00 GMT-0800 (Pacific Standard Time)’

زیرا تاریخ در UTC (ساعت استاندارد جهانی) ذخیره می‌شود و مرورگر کامپیوتر مطابق منطقه زمانی اقیانوس آرام در حال اجرا است که 8 ساعت عقب‌تر از UTC در 1 ژانویه 2019 است.

همانطور که می‌بینیم، انتقال یک رشته تاریخ به سازنده Date گیج کننده است. مرورگرهای مختلف رشته‌های تاریخ را متفاوت تجزیه می‌کنند. به همین ترتیب از روش Date.parse نیز نباید برای تجزیه رشته‌های تاریخ استفاده شود. می‌توانیم مشاهده کنیم که رشته‌های تاریخ مانند رشته‌ای که ما آن را وارد کردیم به صورت UTC و نه به وقت محلی رفتار می‌کنند.

اگر بخواهیم یک شی Date به سازنده منتقل کنیم، می‌توانیم بنویسیم:

new Date(new Date())

وقتی نتیجه را ثبت کنیم چیزی مانند زیر دریافت خواهیم کرد:

‘Sun Oct 20 2019 10:57:58 GMT-0700 (Pacific Daylight Time)’

همچنین می‌توانیم سال، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه را به سازنده وارد کنیم. در اینجا فقط سال و ماه را لازم داریم. بنابراین می‌توانیم چیزی مانند این را بنویسیم:

new Date(2019,0,1,0,0,0,0)

در صورت ثبت نتیجه عبارت زیر برمی‌گردد:

‘Tue Jan 01 2019 00:00:00 GMT-0800 (Pacific Standard Time)’

 توجه داشته باشید که در آرگومان دوم سازنده 0 داریم. بحث دوم شاخص ماه است که برای ژانویه 0 است، برای فوریه 1 و الی آخر. بنابراین دسامبر 11 خواهد بود. بقیه آرگومان‌ها همان چیزی است که ما انتظار داریم. اول سال است، سوم روز، چهارم ساعت، پنجم دقیقه، ششم ثانیه و آخری میلی ثانیه است.

ما می‌توانیم یک شی Date را به زمان UNIX تبدیل کنیم، که از 1 ژانویه 1970 شروع می‌شود. بنابراین می‌توانیم بنویسیم:

+new Date(2019,0,1,0,0,0,0)

هنگام ثبت نتیجه، 1546329600000 را دریافت می‌کنیم. زیرا تاریخ را به یک عدد تبدیل می‌کند.

روش دیگر برای به دست آوردن زمان استفاده از ()getTime. است.

برای تغییر کامپوننت‌های یک شی Date مانند تنظیم ساعت یا روز یا به دست آوردن روز هفته یا روز ماه، متد‌هایی برای انجام این کار در یک شی Date وجود دارد.

متدهای شی Date

در شی Date متدهایی برای به دست آوردن و تنظیم قسمت‌هایی از تاریخ و تبدیل زمان به UTC یا تنظیم منطقه زمانی وجود دارد. برخی از متدهای مهم شی Date شامل موارد زیر است:

Date.now()

زمان کنونی را به صورت زمان UNIX بدون در نظر گرفتن ثانیه‌های افزایشی برمی‌گرداند. این متد استاتیک است.

Date.UTC()

زمان کنونی را به صورت زمان UNIX بدون در نظر گرفتن ثانیه‌های افزایشی برمی‌گرداند. این متد نیز استاتیک است. همچنین آرگومان‌هایی را برای سازنده تاریخ که شامل سال، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه است، می‌پذیرد. اما فقط سال و ماه مورد نیاز است. بنابراین می‌توانیم از آن مانند کد زیر استفاده کنیم:

Date.UTC(2019,0,1,1,0,0,0)

که چیزی شبیه 1546304400000 را برمی‌گرداند.

توابع Getter

Date.getDate()

روز ماه را طبق زمان محلی برمی‌گرداند. به عنوان مثال:

const date = new Date(2019,0,1,0,0,0,0);  
console.log(date.getDate());

از آنجا که در آرگومان‌های سازنده آن را به عنوان روز ماه تعیین کردیم، بنابراین 1 را دریافت می‌کنیم.

Date.getDay()

روز هفته (0–6) را برای تاریخ مشخص شده با توجه به زمان محلی برمی‌گرداند. به این صورت که 0 نشان دهنده یکشنبه و 6 نشان دهنده شنبه و 1 تا 5 نشان دهنده روزهای بین هفته است. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
console.log(date.getDay());

در نتیجه 2 را می‌گیریم که نشان دهنده سه شنبه است.

Date.getFullYear()

سال 4 رقمی تاریخ مشخص شده را با توجه به زمان محلی برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
console.log(date.getFullYear());

در نتیجه 2019 را دریافت می‌کنیم، سال 4 رقمی تاریخ است.

Date.getHours()

ساعت (0–23) تاریخ مشخص شده را با توجه به زمان محلی برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
console.log(date.getHours());

در نتیجه 0 را به دست می‌آوریم. همان چیزی است که در آرگومان ساعت در سازنده مشخص کردیم.

Date. getMilliseconds()

میلی ثانیه‌های تاریخ مشخص شده را با توجه به زمان محلی از 0 تا 999 برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getMilliseconds());

میلی ثانیه مشخص شده در شی date را به دست می‌آورد که باید 0 را همانطور که در سازنده مشخص کردیم برگرداند.

Date.getMinutes()

دقیقه (0 - 59) از تاریخ مشخص شده را به وقت محلی برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getMinutes());

سپس همانطور که در سازنده مشخص کردیم دقیقه 0 را می‌گیریم.

Date.getMonth()

ماه (از 0 یعنی ژانویه تا 11 یعنی دسامبر) تاریخ مشخص شده را با توجه به زمان محلی برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getMonth());

سپس ماه 0 را برای ژانویه دریافت میکنیم، همانطور که در سازنده مشخص کردیم.

Date.getSeconds()

ثانیهها (0 - 59) را در تاریخ مشخص شده به وقت محلی برمیگرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getSeconds());

سپس همانطور که در سازنده مشخص کردیم ثانیه 0 به دست می آوریم.

Date.getTime()

زمان UNIX را برای تاریخ مشخص شده بازمی‌گرداند، که از تاریخ 1 ژانویه 1970 و ساعت 00:00:00 به وقت محلی شروع می‌شود. برای زمان‌های قبل‌تر نیز منفی خواهد بود. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getTime());

سپس مقدار 1546329600000 از تابع ()getTime را دریافت می‌کنیم. نکته قابل توجه برای این کار استفاده از عملگر + است، مانند کد زیر:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(+date);

اگر کد بالا را اجرا کنیم، همان نتیجه ثبت می‌شود.

Date.getTimezoneOffset()

جابجایی منطقه زمانی را در چند دقیقه برای مکان فعلی تنظیم شده در دستگاه میزبان خود برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getTimezoneOffset());

اگر دستگاه میزبان شما روی منطقه زمانی اقیانوس آرام تنظیم شده باشد، 480 دریافت می‌کنیم. زیرا در تاریخ 1 ژانویه 2019 منطقه زمانی اقیانوس آرام 8 ساعت از UTC عقب است، بنابراین دریافت می‌کنیم که جابجایی منطقه زمانی 480 دقیقه است، یعنی 8 ساعت.

Date.getUTCDate()

روز ماه را از 1 تا 31 در تاریخ مشخص شده طبق UTC برمیگرداند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCDate());

از زمانی که 1 ژانویه 2019 را به عنوان تاریخ تعیین کردیم، 1 دریافت میکنیم.

Date.getUTCDay()

روز هفته را از 0 تا 6 طبق تاریخ مشخص شده در UTC برمی‌گرداند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCDay());

در نتیجه 2 را می‌گیریم، زیرا 1 ژانویه 2019 سه شنبه است.

Date.getUTCFullYear()

طبق UTC سال 4 رقمی را در تاریخ مشخص شده برمی‌گرداند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCFullYear());

2019 را دریافت می‌کنیم، زیرا این همان چیزی است که ما در سازنده تاریخ مشخص کردیم.

Date.getUTCHours()

طبق UTC ساعات 0 تا 23 را در تاریخ مشخص شده برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCHours());

اگر تنظیمات محلی روی منطقه زمانی اقیانوس آرام تنظیم شده باشد، ما 8 را می‌گیریم زیرا مشخص کردیم که ساعت به وقت محلی 0 است که همان 8 طبق UTC در 1 ژانویه 2019 می‌شود.

Date.getUTCMilliseconds()

میلی ثانیه تاریخ مشخص شده را از 0 تا 999 طبق UTC برمیگرداند. به عنوان مثال میتوانیم بنویسیم

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCMilliseconds());

میلی ثانیه مشخص شده در شی date را به دست می‌آورد که باید 0 را همانطور که در سازنده مشخص کردیم برگرداند.

Date.getUTCMonth()

ماه را از 0 برای ژانویه تا 11 برای دسامبر در زمان مشخص شده طبق UTC برمی‌گرداند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCMonth());

ماه مشخص شده در شی date را به دست می‌آورد که باید 0 را مانند آنچه که در سازنده مشخص شده برگرداند.

Date.getUTCSeconds()

ثانیه‌ها (0 – 59) را در تاریخ مشخص شده طبق UTC برمی‌گرداند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCSeconds());

سپس همانطور که در سازنده مشخص کردیم 0 ثانیه به دست می‌آوریم.

Date.getYear()

سال را برمی‌گرداند که با توجه به منطقه زمانی محلی در تاریخ مشخص شده معمولا 2 تا 3 رقمی است.

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
console.log(date.getUTCSeconds());

سپس برای سال 2019، 119 را دریافت می‌کنیم.

اگر در عوض داشته باشیم:

const date = new Date(1900, 0, 1, 0, 0, 0, 0);  
console.log(date.getYear());

برای سال 1900، 0 را دریافت می‌کنیم و اگر داشته باشیم:

const date = new Date(2000, 0, 1, 0, 0, 0, 0);  
console.log(date.getYear());

سپس برای سال 2000، 100 را می‌گیریم. بنابراین 1900 طبق متد ()getYear سال 0 است. خیلی بهتر است که به جای گرفتن سال صحیح از یک شی Date، از متد ()getFullYear استفاده کنید.

توابع Setter

برای هر یک از توابع getter که در بالا ذکر کردیم نیز توابع setter مربوطه وجود دارد. ما توابع setter زیر را برای شی Date داریم:

Date.setDate()

روز ماه را با توجه به زمان محلی تنظیم میکند. به عنوان مثال اگر داشته باشیم:

const date = new Date(2019,0,1,0,0,0,0);  
date.setDate(2)  
console.log(date);

وقتی دستگاه میزبان روی منطقه زمانی اقیانوس آرام تنظیم شود، از آنجا که 2 مورد را در تابع setDate مشخص کردیم، عبارت زیر را به دست می‌آوریم:

‘Wed Jan 02 2019 00:00:00 GMT-0800 (Pacific Standard Time)’

Date.setFullYear()

سال 4 رقمی تاریخ مشخص شده را با توجه به زمان محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
date.setFullYear(2020)  
console.log(date.getFullYear());

سپس 2020 را به دست می‌آوریم که سال 4 رقمی تاریخ است.

Date.setHours()

ساعت (0 – 23) تاریخ مشخص شده را با توجه به زمان محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
date.setHours(3)  
console.log(date.getHours());

سپس وقتی getHours را فراخوانی کنیم، 3 می‌شود. همان چیزی است که در آرگومان ساعت در تابع setHours مشخص کردیم.

Date. setMilliseconds()

میلی ثانیه تاریخ مشخص شده را از 0 تا 999 مطابق با زمان محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019,0,1,0,0,0,0);  
date.setMilliseconds(3)  
console.log(date.getMilliseconds());

همانطور که در تابع setMilliseconds مشخص کردیم، وقتی که ما تابع getMilliseconds را فراخوانی می‌کنیم میلی ثانیه مشخص شده در شی date را تنظیم می‌کند که باید 3 را برگرداند.

Date.setMinutes()

دقیقه (0 – 59) از تاریخ مشخص شده را به وقت محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setMinutes(20)  
console.log(date.getMinutes());

سپس 20 دقیقه از متد ()getMinutes را می‌گیریم، مانند آنچه که در تابع setMinutes مشخص کردیم.

Date.setMonth()

ماه (از 0 برای ژانویه تا 11 برای دسامبر) تاریخ مشخص شده را با توجه به زمان محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setMonth(3)  
console.log(date.getMonth());

پس از تنظیم آن توسط ()setMonth، ماه 3 را از ()getMonth می‌گیریم.

Date.setSeconds()

ثانیه‌ها (0 – 59) را در تاریخ مشخص شده به وقت محلی تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setSeconds(10);  
console.log(date.getSeconds());

سپس 10 ثانیه از ()getSeconds را دریافت می‌کنیم، همانطور که در تابع setSeconds مشخص کردیم.

Date.setTime()

زمان UNIX را برای تاریخ مشخص شده تعیین می‌کند که از تاریخ 1 ژانویه 1970 و ساعت 00:00:00 به وقت محلی است. برای زمان‌های قبل‌تر هم منفی خواهد بود. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setTime(100)  
console.log(date.getTime());

سپس از تابع ()getTime مقدار 100 برگردانده می‌شود، زیرا ما آن را با setTime روی 100 تنظیم کرده‌ایم.

Date.setUTCDate()

روز ماه را از 1 تا 31 در تاریخ مشخص شده براساس UTC تنظیم می‌کند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCDate(2)  
console.log(date.getUTCDate(2));

از آنجا که 2 را در setUTCDate مشخص کردیم، پس 2 را می‌گیریم.

Date.setUTCFullYear()

سال 4 رقمی را در تاریخ مشخص شده براساس UTC تنظیم می‌کند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCFullYear(2020)  
console.log(date.getUTCFullYear());

ما با getUTCFullYear() مقدار 2020 را دریافت می‌کنیم، زیرا این همان چیزی است که در تابع setUTCFullYear() مشخص کردیم.

Date.setUTCHours()

ساعات 0 تا 23 را در تاریخ مشخص شده طبق UTC تنظیم می‌کند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCHours(2)  
console.log(date.getUTCHours());

ما با getUTCHours() مقدار 2 را به دست می‌آوریم، زیرا آن را مشخص کردیم وقتی setUTCHours را فراخوانی می‌کنیم.

Date.setUTCMilliseconds()

میلی ثانیه تاریخ مشخص شده را از 0 تا 999 مطابق با UTC تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCMilliseconds(10)  
console.log(date.getUTCMilliseconds());

میلی ثانیه را با ()getUTCMilliseconds به دست می‌آورد، که باید 10 برگرداند همانطور که در ()setUTCMilliseconds مشخص کردیم.

Date.setUTCMonth()

ماه را از 0 برای ژانویه تا 11 برای دسامبر در زمان مشخص شده طبق UTC برمی‌گرداند. به عنوان مثال اگر بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCMonth(3);  
console.log(date.getUTCMonth());

ماه مشخص شده در شی date را به دست می‌آورد که باید 3 را از ()getUTCMonth برگرداند، همانطور که در فراخوانی ()setUTCMonth مشخص کردیم.

Date.setUTCSeconds()

ثانیه‌ها (0 – 59) را در تاریخ مشخص شده طبق UTC تنظیم می‌کند. به عنوان مثال می‌توانیم بنویسیم:

const date = new Date(2019, 0, 1, 0, 0, 0, 0);  
date.setUTCSeconds(10);  
console.log(date.getUTCSeconds());

پس از آنکه ()getUTCSeconds را فراخوانی کردیم، 10 ثانیه به دست می‌آید. طبق آنچه که هنگام فراخوانی setUTCSeconds() مشخص کردیم.

متد ()setYear سال را تنظیم می‌کند. خیلی بهتر است که برای به دست آوردن سال صحیح از یک شی Date در متد ()setFullYear استفاده کنید.

شی Date چند محدودیت دارد. به عنوان مثال از مناطق زمانی پشتیبانی نمی‌کند. وقتی در تاریخ‌های خود به داده‌های منطقه زمانی نیاز داشته باشیم، این مسئله مشکلاتی را ایجاد می‌کند. تاریخ‌های JavaScript فقط از منطقه زمانی محلی و UTC پشتیبانی می‌کند. هنگام دستکاری اشیا date فقط برخی از تبدیلات بین این مناطق زمانی مجاز است. به عنوان مثال وقتی اشیا Date را به یک رشته تاریخ تبدیل می‌کنیم، فقط می‌توانیم بین زمان محلی و UTC یکی را انتخاب کنیم. ناگفته نماند که شی Date JavaScript تاریخ‌ها را به صورت داخلی UTC ذخیره می‌کند.

Moment.js

دستکاری زمان و تاریخ در JavaScript به دلیل محدودیت‌هایی که در بالا به آنها پرداختیم چندان خوشایند نیست. حتی با وجود توابع موجود در اشیا Date، احتمال خطاها و اشکالات زیادی وجود دارد. همچنین هیچ تابعی برای قالب بندی زمان و تاریخ وجود ندارد که این یک مشکل بزرگ است. بنابراین برای حل این مسئله از moment.js استفاده می‌کنیم. این بهترین کتابخانه موجود برای کار با زمان است.

اشیا Date بومی JavaScript دارای مشکلات مناطق زمانی هستند که تاریخهای YYYY-MM-DD بر خلاف زمان محلی با زمان UTC تجزیه می‌شوند. این اشکالاتی را برای توسعه دهندگانی که از این مشکل مطلع نیستند ایجاد می‌کند. برای کسب اطلاعات بیشتر به https://stackoverflow.com/questions/29174810/javascript-date-timezone-issue مراجعه کنید.

همچنین تفاوت‌هایی برای پشتیبانی تاریخ در مرورگرهای مختلف وجود دارد. (به آدرس https://stackoverflow.com/questions/11253351/javascript-date-object-issue-in-safari-and-ie مراجعه کنید)

علاوه بر اینها جمع و تفریق مقادیر زمانی با توابع Date داخلی JavaScript نیز دشوار است. و هیچ راهی برای این کار بدون نوشتن کد زیاد وجود ندارد. همچنین هیچ راهی برای مقایسه 2 زمان هم وجود ندارد.

قالب بندی تاریخ‌ها نیز بدون نوشتن کد برای استفاده از کتابخانه‌های شخص ثالث در دسترس نیست.

Moment.js با ارائه توابع داخلی برای انجام همه این عملیات مشترک، این مسائل را حل می‌کند و توابعی را برای تجزیه و قالب بندی تاریخ‌ها فراهم می‌آورد.

سازنده moment چیزی است که می‌توانید یک رشته تاریخ را در آن وارد کنید و با این کار یک شی moment ایجاد می‌شود. به عنوان مثال می‌توانید بنویسید:

moment('2019-08-04')

یک moment به دست خواهد آمد که می‌توانید آن را با سایر اشیا moment مقایسه کرده و با بازه‌های زمانی مختلف جمع یا تفریق کنید.

اگر مقداری را در سازنده moment وارد نکنید، تاریخ و زمان فعلی را دریافت خواهید کرد.

همچنین یک آرگومان دوم هم می‌گیرد. اگر می‌خواهید مطمئن شوید که تاریخی به عنوان تاریخ YYYY-MM-DD تجزیه شده است، پس بنویسید moment(‘2019–08–04’, 'YYYY-MM-DD'). اگر قالب تاریخ یا زمان خود را نمی‌دانید، می‌توانید در یک آرایه از قالب‌های ممکن آن را وارد کرده تا Moment یکی از گزینه‌های مناسب را انتخاب کند:

moment('2019–08–04', ['YYYY-MM-DD', 'DD-MM-YYYY']);

پس از ایجاد شی Moment، می‌توانید کارهای زیادی مانند قالب بندی تاریخ‌ها را انجام دهید:

const a = moment('2019–08–04', 'YYYY-MM-DD').format('MMMM Do YYYY, h:mm:ss a');  
console.log(a);// August 4th 2019, 12:00:00 am

const b = moment('2019–08–04', 'YYYY-MM-DD').format('dddd');  
console.log(b);// Sunday

const c = moment('2019–08–04', 'YYYY-MM-DD').format("MMM Do YY");  
console.log(c);// Aug 4th 19

const d = moment('2019–08–04', 'YYYY-MM-DD').format('YYYY [escaped] YYYY');      
console.log(d);// 2019 escaped 2019

const e = moment('2019–08–04', 'YYYY-MM-DD').format();  
console.log(e);// 2019-08-04T00:00:00-07:00

در مثال‌های بالا می‌بینیم که می‌توانیم تقریبا به هر شکلی که بخواهیم تاریخ‌ها را قالب بندی کنیم.

همچنین می‌توانیم بگوییم کدام بازه زمانی مربوط به کدام تاریخ است:

const augDate = moment('2019–08–04', 'YYYY-MM-DD');  
const sepDate = moment('2019–09–04', 'YYYY-MM-DD');  
console.log(augDate.from(sepDate)); // a month ago

به علاوه می‌توانیم تاریخ‌های Moment را اضافه یا کم کنیم:

const augDate = moment('2019–08–04', 'YYYY-MM-DD');  
const sepDate = moment('2019–09–04', 'YYYY-MM-DD');  
console.log(augDate.add(10, 'days').calendar()); // 08/14/2019  
console.log(augDate.subtract(10, 'days').calendar()); // 07/25/2019

مقایسه 2 تاریخ نیز آسان است:

moment('2010-01-01').isSame('2010-01-01', 'month'); // true  
moment('2010-01-01').isSame('2010-05-01', 'day');   // false, different month  
moment('2008-01-01').isSame('2011-01-01', 'month'); // false, different year

و نیز می‌توانید بررسی کنید که آیا تاریخی به طور منظم باعث صرفه جویی در زمان می‌شود یا خیر:

const augDate = moment('2019–08–04', 'YYYY-MM-DD');  
const decDate = moment('2019–12–04', 'YYYY-MM-DD');  
console.log(augDate.isDST()) // true  
console.log(decDate.isDST()) // false

شما می‌توانید با فراخوانی تابع ()toDate بر روی یک شی Moment هر زمان خواستید به تاریخ JavaScript برگردید.

همانطور که دیدید در مورد دستکاری تاریخ‌ها، شی Date JavaScript دارای قابلیت‌های محدودی است. همچنین تاریخ‌ها را به خوبی تجزیه نمی‌کند و توانایی قالب بندی آنها را ندارد. به همین دلیل است که برای پر کردن شکاف‌ها باید از کتابخانه‌هایی مانند Moment.js استفاده کنیم تا بتوانیم کدی بدون اشکال ایجاد کنیم که تاریخ‌ها را خیلی راحت‌تر دستکاری کند.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
عرفان حشمتی @heshmati74
مهندس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو