على الرغم من أن JS يوفر العديد من طرق السمات المختلفة للحصول على كائنات تاريخ الوقت ، مثل: GetDate Method | طريقة GetDay | طريقة getLyear | طريقة Gethours ... وما إلى ذلك ، لا توفر طريقة مثل Java للمستخدمين لتنسيق كائن الوقت المحدد وفقًا للقالب (النمط) الذي يوفره أنفسهم ، لذلك قمت بتغليف طريقة صغيرة للجميع للاستمتاع بـ -.-. إذا كان لديك اقتراحات جيدة ، أود أن أوصي به بسخاء.
استخدم نقاط المعرفة:
الوسائط: يمثل هذا الكائن الوظيفة التي يتم تنفيذها ومعلمات الوظيفة التي تسميها. لا يمكن إنشاؤه بشكل صريح. على الرغم من أنه يحتوي على سمة طول ويمكن أن تأخذ قيمًا في بناء جملة "[]" مثل صفيف ، إلا أنها ليست صفيفًا. كائن typeof: المشغل ، إرجاع سلسلة تمثل نوع البيانات للتعبير. ستة إمكانيات: "الرقم" و "سلسلة" و "منطقية" و "كائن" و "دالة" و "غير محددة". Object.Constructor: يمثل الوظيفة التي تنشئ كائنًا. يجب أن يكون الكائن هو اسم الكائن أو الدالة. البيانات الأساسية لا تحتوي على هذه السمة. طريقة exec: قم بتشغيل البحث في سلسلة باستخدام نمط التعبير العادي وأرجع صفيفًا يحتوي على نتائج البحث. لم يتم العثور على تطابق ، ثم يعود فارغة. لن تظهر العناصر المتطابقة نفس النوع في الصفيف مرارًا وتكرارًا. str.split (rex | str): قم بتقسيم سلسلة إلى فرعية ككائن منتظم أو فرعية ، ثم أعد النتيجة كصفيف السلسلة. رمي الخطأ ('msg'): يلقي خطأ بمعلومات الرسالة. يمكن أن يتبع رمي أي تعبير. هناك أيضًا بعض استخدامات .. في المشغلين ثلاثي الأبعاد ، و SUNSTR ، والتي تكون بسيطة نسبيًا.
قصاصة الكود:
نسخة الكود كما يلي:
/**
*** JS الوقت والتاريخ تنسيق *** <br>
* <p>
* تعتمد سلسلة القالب على تنسيق صارم. إذا تجاوز التنسيق ، فسيتم طرح استثناء ، ويمكن أن يظهر كل تنسيق مرة واحدة فقط. على سبيل المثال ، سوف يلقي تنسيق yyyy-mm-yyyy استثناءات
* </p>
* y طول السنة: 2/4 بت <br>
* Q-Quarterly الطول: 1 رقم <br>
* M-Month طول: 1 ~ 2 رقم <br>
* D-Dai طول: 1 ~ 2 رقم <br>
* H-Time Length: 1 ~ 2 STIPTY SYSTER على مدار 24 ساعة ، H: نظام 12 ساعة <br>
* M-Length: 1 ~ 2 رقم <br>
* S-Second طول: 1 ~ 2 بت <br>
* طول S-MS: ثابت 1 بت
* param {date type object} التاريخ
* param {سلسلة نوع template string} fmt
* @إعادة تنسيق سلسلة الوقت والتاريخ
* Author Lyt
*/
وظيفة DateFormat (التاريخ ، FMT) {
إذا (الوسيطات. الطول! = 2) // تحقق من عدد المعلمات
قم برمي الخطأ ("طول الحجج غير قانوني") ؛
if (! التاريخ || (تاريخ typeo! = 'كائن') || (d.Constructor! = date))
خطأ رمي (الوسائط [0] + ': النوع ليس نوع التاريخ ") ؛
if (/h+/.test(fmt) && /h+/.test(fmt)))
خطأ رمي ("تنسيق الساعة خاطئ ، يمكن أن يظهر نفس النوع مرة واحدة فقط على التوالي!") ؛
/* التحقق من المعلمة قالب ، طريقة التحقق العادية*/
var Verify = function (rex) {
var arr = new regexp (rex) .exec (fmt) ؛ // احصل على مجموعة النتائج المطابقة
إذا (! arr) // عودة إذا فشلت المباراة
يعود ""؛
إذا (fmt.split (rex) .length> 2) // الفاصل الزمني لنفس النوع يحدث عدة مرات
خطأ رمي ("خطأ تنسيق FMT: يمكن أن يظهر نفس النوع مرة واحدة فقط في صف!") ؛
إرجاع arr [0] ؛
} ؛
/**
* توفير استبدال مطابقة عالمي لعدة أشهر وأيام وساعات ودقائق وثواني
* param {كائن o مفتاح السمة} r
* param {r يتوافق مع الكائن العادي} rex
**/
var common = function (r ، rex) {
إذا (len! = 1 && len! = 2)
خطأ رمي ("خطأ تنسيق الشهر: M يمكن أن يظهر فقط 1/2 مرة") ؛
لين == 2؟ fmt = fmt.replace (rex ، o [r] .length == 1؟ "0"+o [r]: o [r]): fmt = fmt.replace (rex ، o [r]) ؛
}
var o = {// كائن تخزين البيانات
"y +": date.getlyear () + "" ، // year
"Q +": Math.Floor ((Date.getMonth () + 3) / 3) ، // Quarterly
"M +": Date.getMonth () + 1 + "" ، // month
"D +": Date.getDate () + "" ، // Day
"H +": Date.gethours () + "" ، // 24:00
"H +": Date.gethours () + "" ، // 12 OW
"M +": Date.getMinutes () + "" ، // Points
"S +": Date.getSeconds () + "" ، // Seconds
"S+": Date.getMillisEconds () // milliseconds
}
لـ (var r in o) {
var rex ، len ، temp ؛
rex = جديد regexp (r) ؛
temp = التحقق (rex) ؛ // تطابق السلسلة الناتجة
len = temp.length ؛ // طول
if (! len || len == 0)
يكمل؛
if (r == "y+") {
إذا (len! = 2 && len! = 4)
خطأ رمي ("خطأ تنسيق السنة: y يمكن أن تظهر فقط 2/4 مرات") ؛
لين == 2؟ fmt = fmt.replace (rex ، o [r] .substr (2،3)): fmt = fmt.replace (rex ، o [r]) ؛
} آخر إذا (r == "q+") {
إذا (لين! = 1)
خطأ رمي ("خطأ فصلي التنسيق: Q يمكن أن تظهر مرة واحدة فقط") ؛
fmt = fmt.replace (rex ، o [r]) ؛
} آخر إذا (r == "H+") {
إذا (len! = 1 && len! = 2)
خطأ رمي ("خطأ تنسيق الساعة: H يمكن أن يحدث فقط 1/2 مرة") ؛
var h = (o [r]> 12؟ o [r] -12: o [r]) + "" ؛
لين == 2؟ fmt = fmt.replace (rex ، h.length == 1؟ "0"+h: h): fmt = fmt.replace (rex ، h) ؛
} آخر إذا (r == "s+") {
إذا (لين! = 1)
خطأ رمي ("خطأ تنسيق Milliseconds: يمكن أن تظهر S مرة واحدة فقط") ؛
fmt = fmt.replace (rex ، o [r]) ؛
} آخر {// (r == "m+" || r == "d+" || r == "h+" || r == "m+" || r == "s+")
شائع (R ، Rex)
}
}
إرجاع FMT ؛
}
آثار التوضيح أعلاه هي للرجوع إليها:
نسخة الكود كما يلي: console.log (DateFormat (New Date () ، 'Yyyyy's qq m month dd dd hh ساعة m minute s الثانية s -millisecond')) ؛
نسخة الكود كما يلي: console.log (DateFormat (New Date () ، 'Yyyyyyyyyyyqmmmdddddhhmm mints s second s millisecond')) ؛
نسخة الكود كما يلي: console.log (DateFormat (Dateformat (Date -Date () ، 'Yyyyy' ، Q Quarter ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، Q ، q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q,
نسخة الكود كما يلي: console.log (DateFormat ("أنا لست كائنًا للوقت" ، "Yyyyy Year Q Quarter M Month DD HH HH HOUR MINITY S Second S Millisecond")) ؛
نسخة الكود كما يلي: console.log (DateFormat (New Date () ، 'Yyyyy's qq mmm month ddd day hh ساعة m minute s ثانية s millisecond')) ؛
لن أدرج التأثيرات الأخرى واحدة تلو الأخرى. إذا كنت مهتمًا ، فيمكنك نسخ الكود واختباره مباشرة. يرجى إعطائها تذكيرًا سخيًا إذا كان هناك أي أخطاء أو مناطق تحتاج إلى تحسين.
ما سبق هو مقدمة لهذه الوظيفة المفيدة للغاية. أليس من العملي جدا؟ يمكن للأصدقاء استخدامه مباشرة في مشاريعهم.