اذهب إلى المحتوى

السؤال

نشر

أريد تحويل كائن Date إلى نص ولكن بصيغة YYYYMMDD ، وما أقوم به هو إستخدام مجموعة من التوابع مثل getMonth و getFullYear و getDay .. إلخ.

هل توجد طريقة أفضل من هذه لتحويل كائن Date إلى صيغة YYYYMMDD مباشرة بدلًا من إستعمال العديد من التوابع معًا؟

Recommended Posts

  • 1
نشر (معدل)

إستخدامك للدوال مسبقة التعريف هو الأمر الطبيعي في حال كنت ترمي لصنع برمجيات لا تعتمد بشكل كبير على أدوات خارجية third-party . من جهة أخرى توفر هذه الأدوات عليك الجهد والوقت وتعطيك الفرصة لتركز أكثر على صناعة حلول برمجية للمشكلات قيد الحل أو المشروع الذي تعمل عليه.

للأجابة على سؤالك لابد أولا من تحديد فيما إذا كنت تستعمل javascript في المتصفح أم node.js. لكن لحسن الحظ يمكنك إستعمال مكتبة moment لأتمام المهمة في كلا الحالتين ولكن بطريقتي عمل مختلفتين جزئياً.

في المثال التالي سنوضح كيفية تثبيت(أو إستيراد) المكتبة المذكورة في كل حالة وكما يلي:

	...
<!--في ملف HTML  -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js" ></script>
<!-- إستيراد المكتبة من المصدر -->
...
<script>
  
function formateDate(){
    let date= new Date(Date.now()) // تأريخ اليوم
    console.log("date now", date)     
    let formatted =moment(date).format('DD-MM-yyyy hh:mm:ss')  // تحويل الوقت/التأريخ الى الصيغة المطلوبة
    console.log("formated datetime", formatted) // => 02-09-2022 09:41:30
}

</script>

في حالة nodejs  نقوم أولا بتثبيت المكتبة من خلال cmd أو terminal في المسار الرئيسي للمشروع حيث يوجد ملف package.json. نقوم بتنفيذ أحد الأمرين التاليين بحسب ما تستخدمه.

/* 
$ yarn add moment
إو
$ npm install moment
*/
	 
// الأن نقوم بألإستيراد
const moment= require("moment") //
//أو في حالة es6
//import moment from "moment"

// نستدعي الدالة كما تم شرحه سابقاً
let date= new Date("02-Sep-2022 09:41:30") 
let formatted =moment(date).format('DD-MM-yyyy')
console.log("formated datetime", formatted) // => 02-09-2022
	
تم التعديل في بواسطة علي محسن
تنسيق النص
  • 1
نشر

يمكن تطبيق الفكرة بشكل مختصر لكن مع وجود - بين القيم 

var d = new Date().toISOString().slice(0,10);
YYYY-MM-DD

لكن مع عدة استدعاءات للدوال يمكن تعديل الناتج ليصبح YYYYMMDD 

  • Date تعيد كائن التاريخ الحالي
  • to ISO String تحول التاريخ للتنسيق التالي
  • ثم نأخذ اول جزء من النص split ثم نستبدل - ب فراغ replaceAll
let yourDate = new Date()    // Sat Sep 03 2022 19:23:04 GMT+0300 (Eastern European Summer Time)

yourDate.toISOString()      // '2022-09-03T16:23:04.764Z'
                                          ^
  .split('T')[0]
  .replaceAll('-','')

'20220903'

أو نستخدم slice لاقتطاع أول جزء

var todayDate = new Date().toISOString().slice(0, 10);
                                         ^^^^^^^^^^^^

يمكن استخدام دالة من جيكويري datepicker وتمرير التنسيق المراد مع الوقت

$.datepicker.formatDate('yymmdd', new Date());

 

  • 1
نشر

يمكنك استعمال التابع toLocaleDateString و الذي يقوم بأخذ العديد من الإعدادت الممكنة، في حالتك هذه يمكن استعماله بالشكل التالي:

let options = { year: 'numeric', month: '2-digit', day: '2-digit' };
let todayDate = new Date();
let formattedTodayDate = todayDate.toLocaleDateString('en-GB', options);

حيث هنا قمنا بتحديد الخيارات التي نريدها من أجل كل قسم، توجد خيارات كثيرة للتعديل على كل قسم من التاريخ و لكن هذه الخيارات هي المطلوبة من أجل الشكل الذي تريده.

قمت باستعمال en-GB ﻷنها تقوم بوضع اليوم في الأول و من ثم الشهر على عكس en-US التي تضع الشهر أولاً ثم اليوم و بالتالي كما طلبت.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...