زنگ

کسانی هستند که قبل از شما این خبر را می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه دوست دارید زنگ را بخوانید
بدون هرزنامه

سلام به همه!
من اغلب مجبورم با داده های آماری کار کنم و خیلی به تاریخ ها وابسته است. علاوه بر این، تاریخ یکسان را می توان در قالب های مختلف در صفحه استفاده کرد (به عنوان مثال، ماشین پسند و انسان پسند). فکر می‌کنم اکثر شما ایده‌ای نسبتاً خوب از تمام کدهای وحشتناکی که از استفاده از شی Date بیرون می‌آید دارید.
مثلا برای گرفتن تاریخ فعلیدر قالب DD.MM.YYYY باید موارد زیر را انجام دهیم:
var d = new Date()، fd = d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
و هنگامی که تعداد زیادی از این خطوط وجود دارد؟ آیا به راحتی می توان به خاطر داشت که در جاوا اسکریپت، زمانی که شما نه تنها بر روی آن توسعه می دهید، ماه از صفر شروع می شود؟ یا این واقعیت است که در اینجا میلی ثانیه وجود دارد، و نه ثانیه، تقریباً در همه جای باطن؟ شما می توانید برخی از مشکلات را با کتابخانه محبوب Moment.js حل کنید، اما بسیار کند کار می کند.
کتابخانه مورد نظر این مشکلات را حل می کند.
اگر علاقه مند هستید، پیشنهاد می کنم این نقد کوتاه را بخوانید.

TempusJS مقدار زیادی قند نحوی در شی Date است، بنابراین بسیار سریع است. سینتکس خود کتابخانه بسیار ساده است. به عنوان مثال، مثال قبلی را می توان اینگونه نوشت:
var fd = tempus().format("%d.%m.%Y");
حالا در مورد سرعت در اسپویلر، می توانید مقایسه Tempus با Moment و قالب بندی تاریخ بومی را مشاهده کنید (به بالا مراجعه کنید):

مقایسه JS بومی، MomentJS و TempusJS

تاریخ فعلی را دریافت کنید
Native JS x 2,175,575 ops/s ± 0.75% (96 اجرا نمونه) Moment x 284,864 ops/s ± 0.85% (96 runs sample) Tempus x 2,086,081 ops/s ±0.73% (97 runs sample)
قالب بندی
Native JS x 1,637,517 عملیات در ثانیه ± 0.61٪ (100 اجرا نمونه برداری) لحظه x 8808 عملیات در ثانیه ± 1.07٪ (100 اجرا نمونه) Tempus x 942,815 عملیات در ثانیه ± 0.68٪ (94 اجرا نمونه برداری شده)
تشخیص و تجزیه خودکار تاریخ
Native JS x 11,204,316 عملیات در ثانیه ± 0.81٪ (88 اجرا نمونه برداری شده) لحظه x 38,511 عملیات در ثانیه ± 1.41٪ (95 اجرا نمونه برداری شده) Tempus x 93,973 عملیات در ثانیه ± 1.06٪ (85 اجرا نمونه برداری شده)
تجزیه تاریخ بر اساس قالب
لحظه x 46.293 عملیات در ثانیه ± 0.63٪ (100 اجرا نمونه) Tempus x 109.947 عملیات در ثانیه ± 0.93٪ (99 اجرا نمونه برداری شده)
تجزیه و اعتبار سنجی
لحظه x 44,588 عملیات در ثانیه ± 1.09٪ (90 اجرا نمونه) Tempus x 103,439 عملیات در ثانیه ± 0.90٪ (94 اجرا نمونه برداری شده)
نتایج از لپ تاپ من است گوگل کروم 30.0.1599.114. در مرورگرهای دیگر، نتایج متفاوت است، اما نسبت تقریباً یکسان است.
برای تست ها از کتابخانه benchmark.js استفاده شد
معیارهای سایر ویژگی ها را می توانید ببینید.

بنابراین، مزایای این کتابخانه را می توان به شرح زیر نوشت:

  • پشتیبانی از IE6+، Chrome، Firefox، Opera.
  • پشتیبانی از زنجیره تماس.
  • ماه ها می توانند از 1 (پیش فرض) به جای صفر شروع شوند.
  • میلی ثانیه را می توان غیرفعال (پیش فرض) یا فعال کرد.
  • کار سریع (زیرا در بسیاری از موارد از شیء اصلی Date مرورگر استفاده می شود که اجرای آن به زبان های سریع تری نوشته شده است).
  • از فرمت ها و پلاگین های سفارشی پشتیبانی می کند
  • اعتبارسنجی تاریخ بسیار سریع است و فقط به توابعی که تاریخ را تنظیم می کنند بستگی دارد (زیرا اعتبارسنجی از قبل هنگام وارد کردن مقادیر انجام می شود و به طور جداگانه محاسبه نمی شود).
  • چند زبانه بودن و تشخیص خودکار زبان کاربر.

در اینجا ما فقط در مورد برخی از توابع صحبت خواهیم کرد.

قالب بندی و تجزیه

بنابراین، برای شروع، نمونه دیگری از قالب بندی تاریخ است. در اینجا از call chaining نیز استفاده می کنیم. در پایان هر تنظیم مقدار، یک شی TempusDate دریافت می‌کنیم که می‌توانیم در ادامه زنجیره از آن استفاده کنیم. مثال:
tempus(). // دریافت جدید محاسبه تاریخ ((ماه: -1)). // قالب یک ماهه را کاهش دهید("%d.%m.%Y"); // خروجی به صورت رشته
بنابراین، ما همان روز، ساعت و ثانیه را دریافت می کنیم، اما یک ماه پیش. این برای دریافت گزارش های ماه گذشته مفید است.

مثال بعدی تجزیه تاریخ است.
// یک شی TempusDate را با تاریخ "2013-11-18" tempus("11/18/2013") برمی گرداند. // یک شی TempusDate را با تاریخ "2013-12-12" tempus("2013-12-12", "%Y-%m-%d") برمی گرداند.
Tempus می تواند به طور خودکار برخی از فرمت های شناخته شده را شناسایی کند. همچنین، می توانید یک فرمت خاص را مشخص کنید، سپس تجزیه سریعتر خواهد بود. بعلاوه، می‌توانید تاریخی را که در صورت شکست تجزیه، برگردانده می‌شود، تنظیم کنید:
// زیرا "123" با قالب "%d.%m.%Y" مطابقت ندارد، سپس // یک شی حاوی تاریخ 2013-01-01 بازگردانده می شود tempus("123", "%d.%m.%Y "، tempus ())؛
می توانید لیست فرمت های پیش فرض را مشاهده کنید

حالا بیایید فرمت تاریخ فرمت شده را تغییر دهیم
// "2013-11-05" tempus("11/05/2013").format("%Y-%m-%d"); // یا مانند این // "October, 12" tempus("2013-10-12 12:31:01", "%Y-%m-%d %H:%M:%S").format(" % B، %d")؛

همچنین، می توانید از محلی سازی برای قالب بندی استفاده کنید. به‌طور پیش‌فرض، زبان کاربر (برگرفته از مرورگر) یا زبان پیش‌فرض در صورتی که زبان کاربر در بین زبان‌های Tempus موجود یافت نشود، انتخاب می‌شود.
// تنظیم زبان tempus.lang("ru"); // قالب استفاده استاندارد // "Nov, 05" tempus(1383609600).format("%B, %d");
در این لحظهفقط دو زبان وجود دارد - روسی و انگلیسی، بنابراین خوشحال می شوم کمک کنم.

اعتبار سنجی

اعتبارسنجی تاریخ به این صورت انجام می شود:
// tempus false("08/32/2013", "%d.%m.%Y").valid(); // tempus ("00:00 01/01/2012", "%H:%M %d.%m.%Y").valid();

در صورت بروز خطا، می توانید فیلدهایی را که در آن رخ داده است مشاهده کنید - هر جا که مقدار آن اشتباه نباشد:
// برمی‌گرداند ("سال":-5، ماه": نادرست، "روز": نادرست، "ساعت": نادرست، // "دقیقه": نادرست، "ثانیه": نادرست، "میلی‌ثانیه": نادرست) tempus (). سال (-5). // مجموعه سال=-5، i.e. خطاهای نامعتبر(); // دریافت یک شی با خطا

محدوده تاریخ

گاهی اوقات باید تعداد سال ها (مثلاً سن)، ماه ها، روزها و غیره را بدست آوریم. بین دو تاریخ برای این کار می‌توانیم از متد بین استفاده کنیم که تفاوت بین دو تاریخ را پیدا می‌کند و برمی‌گرداند فرمت مورد نظر("سال"، "ماه"، "روز"، "ساعت"، "دقیقه"، "ثانیه"، "میلی ثانیه").
در اینجا یک مثال ساده برای به دست آوردن تعداد ماه های بین 1 نوامبر 2013 و 5 مه 2014 آورده شده است:
// 6 tempus().between(tempus(), "month");
یا چند ساعت تا سال جدید باقی مانده است
tempus().between(tempus(), "hours");
در مثال آخر می بینید که من فقط سال را مشخص کردم. هنگام تنظیم یک مقدار برای یک آرایه یا شی، مقادیر از دست رفته خواهند بود
پر شده با حداقل شما می توانید لیستی از ثابت ها را با حداقل مقادیر در مستندات مشاهده کنید.

همچنین، می‌توانیم هر تاریخی را با استفاده از تابع calc تغییر دهیم:
// بازگشت TempusDate با تاریخ 2012-01-01 tempus().calc((سال: 1، ماه: -4، روز: -1));

فرمت های خود را

ما قالب خودمان را برای ماه اعمال می کنیم که می تواند مقادیری از 1 تا 12 داشته باشد (به جای 01 تا 12):
// ثبت فرمت جدید tempus.registerFormat("%q", // Directive - %q function(date) ( // تابع قالب بندی را در اینجا مشخص کنید، یعنی چه چیزی جایگزین %q بازگشت date.month(); ) , function(value) (// و در اینجا تابع تجزیه var v = Number(value) است؛ بازگشت (ماه: (isNaN(v) ? undefined: v))؛ 1, // حداقل طولی که مقدار 2 می تواند , // حداکثر طول "عدد" // Type); // تست // "01.1.2013" را برمی گرداند. tempus((سال: 2013، ماه: 1، روز: 1)).format("%d.%q.%Y"); // برمی‌گرداند ("سال":2013، ماه":2، روز":10، ساعت":0، دقیقه":0، ثانیه":0); tempus("10.2.2013", "%d.%q.%Y").get();
هنگام ثبت نام، ممکن است متوجه شوید که برخی از پارامترها به طور جداگانه تنظیم شده اند، در حالی که می توانید از آن استفاده کنید عبارت منظم. در واقع، ابتدا آنجا بود، اما پس از رها کردن آن، سرعت چندین ده برابر افزایش یافت.
اگر نیاز به حذف فرمت دارید، از unregisterFormat استفاده کنید:
tempus.unregisterFormat("%d"); // "%d.01.2013" را برمی گرداند زیرا دستور %d دیگر وجود ندارد. tempus.format((سال: 2013، ماه: 1، روز: 1)، "%d.%m.%Y");

گیرنده / تنظیم کننده

می توانید مقداری را با استفاده از year()، month()، day()، hours()، minutes()، seconds()، milliseconds()، dayOfWeek()، utc()، timestamp() یا مجموعه توابع (). مثلا:
tempus(). // تاریخ فعلی سال (1900) را دریافت کنید. // همه چیز را همانطور که هست رها کنید، اما سال را روی 1900 leapYear(); // بررسی کنید که آیا سال کبیسه است یا خیر، در این مورد tempus().year(); // و بنابراین سال جاری را به صورت عددی بدست می آوریم

تولید تاریخ

شما می توانید تاریخ را به روش های مختلفی ایجاد کنید، لیست کاملپارامترها در مستندات موجود است. در اینجا یک نمونه حداقلی وجود دارد.
// ["29.03.2013"، "30.03.2013"، "31.03.2013"، "01.04.2013"، "02.04.2013"]; tempus.generate(( dateFrom: "20130329"، formatFrom: "%Y.%m.%d"، dateTo: "20130402"، دوره: (روز: 1)، قالب: "%d.%m.%Y" )))
این می تواند برای نمایش نمودارها بر اساس تاریخ و تغییر قالب نمایش به طور مستقیم در مشتری، بدون درخواست به باطن مفید باشد. تاریخ را می‌توان به‌عنوان یک آرایه یا به‌عنوان اشیاء تولید کرد، جایی که خود تاریخ‌ها به‌عنوان کلید استفاده می‌شوند (این زمانی مفید است که ما نیاز داریم یک رویداد را به یک تاریخ پیوند دهیم، مثلاً زمانی که تقویم خود را می‌سازیم). همچنین، تاریخ ها را می توان بر اساس روز، هفته، ماه، ساعت، سال - هر چه باشد، گروه بندی کرد. این را می توان در تقویم نیز اعمال کرد.

پلاگین ها

آخرین اما نه کم اهمیت ترین، افزونه ها. در اینجا ما کارخانه را برای ایجاد یک تاریخ تصادفی گسترش می دهیم. همچنین به کلاس TempusDate نیاز داریم که در tempus.classes() یافت می شود. این یک نمونه پلاگین است:
(تابع (tempus) ( var TempusDate = tempus.classes ("TempusDate"); tempus.randomDate = function() ( var date = new TempusDate(); date.year(Math.floor((Math.random()*( tempus.MAX_YEAR - tempus.MIN_YEAR)) + tempus.MIN_YEAR)). month(Math.floor((Math.random()*(tempus.MAX_MONTH - tempus.MIN_MONTH)) + tempus.MIN_MONTH)).day(ریاضی. floor((Math.random()*(date.dayCount() - tempus.MIN_DAY)) + tempus.MIN_DAY)).hours(Math.floor((Math.random()*(tempus.MAX_HOURS - tempus.MIN_HOURS) ) + tempus.MIN_HOURS)). دقیقه (Math.floor((Math.random()*( tempus.MAX_MINUTES - tempus.MIN_MINUTES)) + tempus.MIN_MINUTES)).seconds(Math.floor((Math.random() *( tempus.MAX_SECONDS - tempus.MIN_SECONDS)) + tempus.MIN_SECONDS))؛ تاریخ بازگشت؛ ))( tempus); // اکنون می توانیم تاریخ هایی مانند این ایجاد کنیم var someRandomDate = tempus.randomDate();
من فکر می کنم که از این طریق می توان به راحتی ویجت ها را با استفاده از jQuery + Tempus، Angular + Tempus و غیره نوشت.

منابع

می توانید آن را با دانلود کد منبع از github نصب کنید:
https://github.com/crusat/tempus-js/releases
یا از طریق bower:
$ bower نصب tempus
شما فقط به یک فایل نیاز دارید - tempus.js یا tempus.min.js.

امیدوارم این کتابخانه مفید واقع شود و همچنین جالب است بدانیم چه کمبودهایی برای توسعه بیشتر کتابخانه در مسیر درست دارد. با تشکر از توجه شما!
P.S. برای دعوت متشکرم!

به ندرت پیش می آید که یک برنامه نویس از کار با تاریخ و زمان اجتناب کند. به طور کلی تاریخ/زمان یک مفهوم اساسی است و در اکثر زبان ها مکانیسم های داخلی برای کار با این نوع داده وجود دارد. به نظر می رسد JS از این قاعده مستثنی نیست، یک نوع تاریخ داخلی وجود دارد، در نمونه اولیه مجموعه ای از توابع وجود دارد، با این حال ...

چه کسی مقصر است
اولین مشکل زمانی ایجاد می شود که باید تاریخ / زمان را در منطقه زمانی غیر از UTC و محلی تنظیم کنید. سازنده Date چنین پارامتری ندارد.

NewDate(); تاریخ جدید (مقدار)؛ تاریخ جدید (dateString)؛ تاریخ جدید (سال، ماه[، روز[، ساعت[، دقیقه[، ثانیه[، میلی ثانیه]]]]])؛
تنها گزینه ای که می توانید یک افست نسبت به UTC تعیین کنید راه سوم است. فراخوانی سازنده در این قالب به شما امکان می دهد افست را به عنوان بخشی از رشته ارسال کنید:

تاریخ جدید ("یکشنبه 01 فوریه 1998 00:00:00 GMT+0700")
رشته در قالب RFC2822 پذیرفته شده است، که بسیار ناخوشایند است و وارد کردن دستی آن دشوار است. دریافت چنین رشته ای از ورودی کاربر تقریبا غیرممکن است. نمی توانم شخصی را تصور کنم که با وارد کردن تاریخ در این قالب موافقت کند.

با وجود این واقعیت که در Date می توانید تمام پارامترها را به طور جداگانه برای منطقه زمانی UTC تنظیم کنید، این مشکل را حل نمی کند - منطقه زمانی محلی باقی می ماند. اما این تنها مشکل نیست.

افست از UTC ثابت نیست. این تابعی از تاریخ، زمان (خوب، یا از مهر زمانی، در صورت تمایل) و، دوباره، منطقه زمانی است. به عنوان مثال، برای مسکو، آخرین ترجمه زمانی به شرح زیر است:

تاریخ جدید(2014, 9, 25, 0, 0, 0); // 2014/10/26، 21:00:00 GMT+3 تاریخ جدید (2014, 9, 27, 0, 0, 0); // 2014/10/25، 22:00:00 GMT+4
بنابراین، سازنده در گزینه سوم عملاً بی فایده می شود، زیرا افست باید از قبل شناخته شود. و همانطور که گفته شد نمی توان به این سادگی به دست آورد. تنها کتابخانه ای که از پایگاه داده اولسون برای محاسبه شیفت استفاده می کند، timezone-JS است. مشکل استفاده از این کتابخانه این است که کتابخانه های زیربنایی (انتخاب کنندگان تاریخ/زمان) چیزی در مورد آن نمی دانند و به طور فعال از تاریخ استاندارد به صورت داخلی استفاده می کنند. سایر کتابخانه‌هایی که با شی Date کار می‌کنند به صراحت به این پایگاه داده مراجعه نمی‌کنند و به‌روزرسانی‌هایی را از آن دریافت نمی‌کنند. (در نظرات تصحیح کنید.)

در یک برنامه تجاری، مناطق زمانی تنها در صورتی معنا پیدا می کنند که تاریخ و زمان ذکر شده باشد. به عنوان مثال، اگر روز کاری از ساعت 9:00 شروع شود، بعید است که انتظار داشته باشید که همکار شما از ولادی وستوک در ساعت 15:00 شروع به کار کند. مناطق زمانی را نباید در نظر گرفت و در این مورد، تاریخ باید در UTC نمایش داده شود. با این حال، در مورد رویدادهای منظم که در همان زمان در مناطق زمانی مختلف اتفاق می‌افتند، هنوز یک منطقه زمانی مورد نیاز است. به عنوان مثال، اسکرام روزانه شما از ساعت 10:00 برای شما و در ساعت 13:00 برای نووسیبیرسک شروع می شود. به هر حال، این دقیقاً تفاوت بین GMT و UTC است. UTC زمان بدون افست است و GMT زمان با افست 0 است. اجازه دهید با یک مثال توضیح دهم:

2014/12/31، 20:59:59 به وقت گرینویچ در منطقه زمانی مسکو باید شبیه به 12/31/2014، 23:59:59 :59 باشد.
به دلیل این حساب، آنها بیشتر گیج می شوند. متأسفانه این پارامتر در همه جا اشتباه گرفته شده است. عدم وجود نشانه مستقیم منطقه زمانی در JS به عنوان منطقه زمانی محلی در نظر گرفته می شود و نشانگر UTC و GMT معادل است.

در این شرایط، بین المللی می تواند کمک کند. من می توانستم، اما مجبور نیستم. به طور خاص، چنین پارامتر TimeZone وجود دارد، اما، کمی بیشتر، استاندارد تعریف می کند: منطقه زمانی مورد استفاده. تنها مقداری که پیاده سازی ها باید تشخیص دهند "UTC" است. در حال حاضر، به جز کروم، هیچ مرورگر دیگری از مناطق زمانی دلخواه پشتیبانی نمی کند.
با محدوده زمانی در JS، همه چیز واقعاً بد است - چیزی مشابه در زبان وجود ندارد. اگر می خواهید خوب عمل کنید، خودتان این کار را انجام دهید.

چه باید کرد
  • انتخاب 1.
    از منطقه زمانی سفارشی استفاده نکنید. گزینه ارجح و احتمالا بی دردسرترین. یعنی شما فقط منطقه زمانی محلی و UTC را دارید. برای این موارد، به نظر می رسد همه مرورگرها همه چیز دارند، البته نه چندان راحت. علاوه بر این، منطقه زمانی به صورت سراسری برای سیستم عامل تنظیم شده است و تغییر آن برای یک برنامه وب خاص مناسب نیست.
  • گزینه 2.
    اگر به مناطق زمانی دلخواه نیاز است، از مهر زمانی استفاده نکنید. اصلا زمان را در بانک پس انداز در خط RFC با منطقه زمانی ذخیره کنید. مطمئن نیستم که آیا این به شکست جابجایی منطقه زمانی در مفهوم بین مرورگر کمک می کند یا خیر، اما حداقل کروم از چنین تغییراتی آگاه است.
  • گزینه 3.
    شرایط متفاوت است و این اتفاق می افتد که زمان در پایگاه داده از هر دستگاهی ثبت می شود. یعنی به صورت مهر زمانی. جایی برای اجرا وجود ندارد، برای نمایش صحیح زمان، باید یا منطقه زمانی دستگاه یا منطقه زمانی کاربر یا هر دو را بدانید و همه جابجایی ها را دست به دست محاسبه کنید. شما نمی توانید بدون استفاده از پایه اولسون انجام دهید.
  • این افسانه باید اخلاقی داشته باشد، اما من هنوز چیزی برای اضافه کردن ندارم. در پیش نویس های استاندارد ECMA، من هیچ پیشرفتی را مشاهده نمی کنم، احتمالاً هیچ پیشرفتی وجود نخواهد داشت.

از new Date() برای ایجاد یک شیء Date جدید حاوی تاریخ و زمان فعلی استفاده کنید.

توجه داشته باشید کهتاریخ() فراخوانی بدون آرگومان معادل استتاریخ جدید (Date.now()) .

هنگامی که یک شی تاریخ دارید، می توانید از هر یک از چندین روش موجود برای بازیابی ویژگی های آن استفاده کنید (به عنوان مثال، getFullYear() برای دریافت یک سال 4 رقمی).

در زیر چند روش متداول تاریخ آورده شده است.

سال جاری را دریافت کنید

var year = (تاریخ جدید()).getFullYear(); ورود به سیستم کنسول (سال)؛ // خروجی نمونه: 2016

ماه جاری را دریافت کنید

var month = (تاریخ جدید()).getMonth(); ورود به سیستم کنسول (ماه)؛ // خروجی نمونه: 0

توجه داشته باشید که 0 = ژانویه. این به این دلیل است که ماه ها متفاوت است 0 قبل از 11 ، بنابراین اغلب مطلوب است که 1+ را به فهرست اضافه کنید.

دریافت روز جاری

varday = (تاریخ جدید()).getDate(); ورود به سیستم کنسول (روز)؛ // خروجی نمونه: 31

ساعت فعلی را دریافت کنید

var ساعت = (تاریخ جدید()).getHours(); ورود به سیستم کنسول (ساعت)؛ // خروجی نمونه: 10

دقایق جاری را دریافت کنید

var minutes = (تاریخ جدید()).getMinutes(); گزارش کنسول (دقیقه)؛ // خروجی نمونه: 39

ثانیه های فعلی را دریافت کنید

var seconds = (new Date()).getSeconds(); ورود به سیستم کنسول (دوم)؛ // خروجی نمونه: 48

میلی ثانیه های فعلی را دریافت کنید

برای بدست آوردن میلی ثانیه (0 تا 999) یک نمونه شی Date، از روش getMilliseconds استفاده کنید.

var milliseconds = (تاریخ جدید()).getMilliseconds(); ورود به سیستم کنسول (میلی ثانیه)؛ // خروجی: در حال حاضر میلی ثانیه

زمان و تاریخ فعلی را به رشته قابل خواندن توسط انسان تبدیل کنید

varnow = new Date(); // تبدیل تاریخ به رشته در قالب منطقه زمانی UTC: console.log(now.toUTCString()); // خروجی: چهارشنبه، 21 ژوئن 2017، 09:13:01 GMT

روش استاتیک Date.now() تعداد میلی ثانیه ها را از 1 ژانویه 1970 00:00:00 UTC برمی گرداند. برای بدست آوردن تعداد میلی ثانیه هایی که از آن زمان با استفاده از یک نمونه از شی Date گذشته است، از متد getTime آن استفاده کنید.

// دریافت میلی ثانیه با استفاده از روش استاتیک در حال حاضر Date console.log(Date.now()); // دریافت میلی ثانیه با استفاده از روش getTime of Date نمونه console.log((new Date()).getTime());

جاوا اسکریپت - درس 11. تاریخ، نمایش و پردازش

در جاوا اسکریپت، تاریخ به عنوان تعداد میلی ثانیه هایی که از اول ژانویه 1970 گذشته است، تعریف می شود.

شی داخلی برای کار با تاریخ و زمان استفاده می شود تاریخ. این شیء هیچ خاصیت ندارد، اما چندین روش دارد که به شما امکان تنظیم و تغییر تاریخ و زمان را می دهد.

یک شی تاریخبا اپراتور ایجاد شده است جدیدو سازنده - تاریخ.

مثلا:

var myData=تاریخ جدید();

مقدار متغیر اطلاعات منتاریخ و زمان فعلی خواهد بود:

روش های شی تاریخمی توانید مقادیر ماه، روز هفته، ساعت، دقیقه و ثانیه را به طور جداگانه دریافت کنید:

  • getDate- عددی بین 1 تا 31 را نشان دهنده روز ماه برمی گرداند.
  • ساعت دریافت- ساعت روز را در محدوده 0 (نیمه شب) تا 23 برمی گرداند.
  • دریافت دقیقه- دقیقه را در محدوده 0 تا 59 برمی گرداند.
  • دریافت ثانیه- ثانیه ها را در محدوده 0 تا 59 برمی گرداند.
فرض کنید می‌خواهیم اسکریپتی بنویسیم که زمان جاری را تعیین کرده و با فرمت «hh:mm:ss» خروجی بگیرد.

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

حالا بیایید خود تابع را بنویسیم nTime():

تابع nTime(obj) ( var t=new Date(); var h=t.getHours(); var m=t.getMinutes(); var s=t.getSeconds(); var result=h+":"+m+ ":"+s; obj.res.value=result;)

* همانطور که به یاد دارید، متدها با یک نقطه از شی جدا می شوند، در درس 3 در مورد این صحبت کردیم *همانطور که می بینید، همه چیز ساده است. ابتدا زمان فعلی را تعیین می کنیم و سپس با استفاده از روش ها مقادیر جداگانه ساعت، دقیقه و ثانیه را از آن استخراج می کنیم.

در اینجا من می خواهم خط را روشن کنم var result=h+":"+m+":"+s. برای اولین بار با نیاز به خروجی مقادیر متغیر و متن ساده به نتیجه مواجه شدیم. در اصل، هیچ چیز پیچیده ای نیست: متغیرها همانطور که هستند نوشته می شوند، متن در گیومه گرفته می شود و علامت + عمل الحاق را انجام می دهد، یعنی. انجمن های آنها

در مثال ما یک نقص وجود داشت، می خواستیم زمان با فرمت "hh:mm:ss" نمایش داده شود و اکنون با فرمت "h:m:s" نمایش داده می شود. یعنی در ساعت 5 صبح، زمان به صورت "5:0:0" نمایش داده می شود، اما من آن را اینگونه می خواهم: "05:00:00" (که بیشتر آشناست). برای تکالیف، می توانید سعی کنید این مشکل را برطرف کنید. مثلا با استفاده از اپراتور اگرو رشته تحت اللفظی "0" (ایده ساده است: اگر ساعت کمتر از 10 باشد، در نتیجه قبل از ساعتبا همه متغیرها "0" و به همین ترتیب بنویسید).

در ضمن بیایید به بررسی روش های شیء ادامه دهیم تاریخ:

  • getDay- روز هفته را به عنوان یک عدد صحیح از 0 (یکشنبه) تا 6 (شنبه) برمی گرداند.
  • دریافت ماه- تعداد ماه در سال را به صورت یک عدد صحیح از 0 (ژانویه) تا 11 (دسامبر) برمی گرداند.
  • getYear- سال را به عنوان دو رقم آخر برمی گرداند ( getFullYearسال را به صورت چهار رقمی برمی گرداند).

    * متاسفانه از سال 2000 مشکل نمایش سال در مرورگرهای مختلف وجود دارد. متد getYear در IE کل سال را (به جای دو رقم آخر) نمایش می دهد، در حالی که فایرفاکس 1XX را به جای XX (یعنی جایگزین 1) نمایش می دهد. بنابراین ترجیحاً از روش getFullYear استفاده شود.

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

کد صفحه html ساده خواهد بود:

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

حالا بیایید خود تابع را بنویسیم tData():

تابع tData(obj) ( var s؛ var t=new Date(); var y=t.getFullYear(); var d=t.getDate(); var mon=t.getMonth(); سوئیچ (mon) (مورد 0: s="ژانویه"؛ شکست؛ مورد 1: s="فوریه"؛ شکست؛ مورد 2: s="مارس"؛ شکست؛ مورد 3: s="آپریل"؛ شکست؛ مورد 4: s="می "; break; case 5: s="June"; break; case 6: s="July"; break; case 7: s="August"; break; case 8: s="September"; break; case 9 : s="اکتبر"; break; case 10: s="November"; break; case 11: s="December"; break; ) var result=d+" "+s+" "+y; obj.res.value =نتیجه؛ )

نسبت به مثال اول معتبرتر بود، زیرا من باید نام ماه ها را به روسی ترجمه کنم.

روش های مورد بحث در بالا به شما امکان می دهد تاریخ را بدست آورید. اگر نیاز به تعیین تاریخ داریم، باید از روش های زیر استفاده کنیم:

  • setDate- روز ماه را در محدوده 1 تا 31 تنظیم می کند.
  • setHours- ساعت را برای زمان فعلی در محدوده 0 (نیمه شب) تا 23 تنظیم می کند.
  • تنظیم دقیقه- دقیقه را در محدوده 0 تا 59 تنظیم می کند.
  • setseconds- ثانیه ها را در محدوده 0 تا 59 تنظیم می کند.
  • مجموعه سال- ارزش سال را تعیین می کند.
  • setMonth- مقدار ماه را در محدوده 0 (ژانویه) تا 11 (دسامبر) تنظیم می کند.
  • مدت زمان معینی- مقدار یک شی را تعیین می کند تاریخو تعداد میلی ثانیه ها را از اول ژانویه 1970 برمی گرداند.
بنابراین، اگر بخواهیم تاریخ را روی 06 دسامبر 2010 تنظیم کنیم، در تابع کد زیر را خواهیم داشت:

Vart=تاریخ جدید(); var y=t.setYear(2010); vard=t.setDate(6); varmon=t.setMonth(11); ...

می توانید با تعیین رشته قالب "ماه، روز، سال ساعت: دقیقه: ثانیه" به عنوان پارامتر، تاریخ را مستقیماً در سازنده تنظیم کنید:

Var t=new Date("Feb, 10, 1975 5:45:10 PM");

ساعت ها، دقیقه ها و ثانیه ها را می توان حذف کرد (آنها صفر خواهند بود):

Var t=new Date("Feb, 10, 1975");

همان تاریخ را می توان با استفاده از اعداد تنظیم کرد و سال، ماه، روز، ساعت، دقیقه، ثانیه را با کاما از هم جدا کرد:

Var t=new Date(75, 1, 10, 17, 45, 10);

یا با حذف ساعت، دقیقه و ثانیه (صفر خواهند شد):

Var t=new Date(75, 1, 10);

* یک مشکل وجود دارد: IE نمی خواهد سال را نمایش دهد، بنابراین بهتر است از این گزینه ها استفاده نکنید.

این همه است، شما کاملاً آماده هستید تا خودتان یک اسکریپت بنویسید، که وقتی صفحه بارگیری می شود، تاریخ، زمان و روز بازدید آن (به شکل معمولی روسی) نمایش داده می شود. موفق باشید!

زنگ

کسانی هستند که قبل از شما این خبر را می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه دوست دارید زنگ را بخوانید
بدون هرزنامه