Moment: دعم المللي ثانية العشرية

تم إنشاؤها على ٢٢ يونيو ٢٠١٦  ·  3تعليقات  ·  مصدر: moment/moment

(الإصدار 2.13.0)
يسمح معيار ISO بأي عدد من الثواني العشرية قبل "Z" في سلسلة التاريخ والوقت. يبدو أن النظام الأساسي .net يستخدم 7 منازل عشرية - بينما تقوم مكتبة moment.js بتوزيع أول 3 منازل عشرية فقط.

لقد أجرى قرد تصحيحًا للمنسق (toISOString ()) لسحب الأرقام السبعة الكاملة من كائن الإنشاء - لكن هذا اختراق رهيب. سيكون تصحيح المحلل اللغوي أفضل بكثير - لكنه يتجاوز فهمي الحالي.

ربما هناك حل آخر؟

التعليق الأكثر فائدة

ماجي

Ah. I hadn't realised this was a limitation of Javascript.

I had found the option for formatting that you had mentioned - but

بالنسبة لي ، أحتاج حقًا إلى تلك الأرقام الإضافية. الأصفار ليست جيدة بما فيه الكفاية.

My 'monkey patch' looks at the creationData for the moment and

يوزع المللي ثانية يدويًا من سلسلة الإدخال (إذا كان كذلك
متوفرة).

//Monkey patch the moment library to use 7 decimal places for seconds in it's standard ISO format - to match C# moment.fn._oldToISOString = moment.fn.toISOString; moment.fn.toISOString = function () { try { var originalDateSplit = moment(this).creationData().input.split("."); var milliseconds = originalDateSplit[originalDateSplit.length - 1]; if (milliseconds.indexOf(this.milliseconds()) === 0) { return moment(this).format('YYYY-MM-DD[T]HH:mm:ss.') + milliseconds + "Z"; } else { return moment(this)._oldToISOString(); } } catch (error) { return moment(this)._oldToISOString(); } }
إنها ليست جميلة - وستعمل فقط للحظات التي كانت
تم تحليله في الأصل من سلسلة تاريخ ISO. سيكون أيضًا غير متسق
باستخدام دالة مللي ثانية (). ستكون الفكرة الأفضل هي اعتراض ملف
الاعراب واسحب أي ثواني عشرية إلى خاصية منفصلة على
كائن اللحظة - ثم يمكننا إعادة ذلك حسب الحاجة.

However - I do appreciate that we are moving beyond the scope of the

مكتبة moment.js في هذه المرحلة - لن تكون غلافًا لملف
كائن تاريخ جافا سكريبت.

Perhaps we could make this limitation a little clear in the moment.js

توثيق؟ في الوقت الحالي ، يتم تضمين اقتطاع الميلي ثانية من ملف
رمز المثال ، ولكن لم يتم وصفه بشكل صريح - ولا يوجد تفسير لذلك
لماذا يتصرف بهذه الطريقة.

Thank you for your help Maggie - it is much appreciated.

يعتبر،
بن هاثاوي
مطور برامج
DATUM - المراقبة الجيوتقنية والإنشائية

ال 3 كومينتر

نظرًا لأن Moment.js عبارة عن غلاف لكائن التاريخ في JavaScript ، فنحن مقيدون بثلاث منازل عشرية (مللي ثانية). هذا لأن هذا هو كل ما يدعمه كائن التاريخ ، لذلك لا توجد طريقة لتخزين المزيد. لا يجب أن تضطر إلى تصحيح أي شيء على القرد للحصول على سبع منازل عشرية لعرضها أو تحليلها. فقط كن على علم بأنه سيتم استخدام الثلاثة الأولى فقط.

moment('2016-01-01T05:21:22.1234567Z').format('YYYY-MM-DDTHH:mm:ss.SSSSSSS')
"2015-12-31T23:21:22.1230000"

لاحظ أن الناتج ممتلئ بصفر ، ولكن هناك سبعة أرقام في كلا الاتجاهين.

ماجي

Ah. I hadn't realised this was a limitation of Javascript.

I had found the option for formatting that you had mentioned - but

بالنسبة لي ، أحتاج حقًا إلى تلك الأرقام الإضافية. الأصفار ليست جيدة بما فيه الكفاية.

My 'monkey patch' looks at the creationData for the moment and

يوزع المللي ثانية يدويًا من سلسلة الإدخال (إذا كان كذلك
متوفرة).

//Monkey patch the moment library to use 7 decimal places for seconds in it's standard ISO format - to match C# moment.fn._oldToISOString = moment.fn.toISOString; moment.fn.toISOString = function () { try { var originalDateSplit = moment(this).creationData().input.split("."); var milliseconds = originalDateSplit[originalDateSplit.length - 1]; if (milliseconds.indexOf(this.milliseconds()) === 0) { return moment(this).format('YYYY-MM-DD[T]HH:mm:ss.') + milliseconds + "Z"; } else { return moment(this)._oldToISOString(); } } catch (error) { return moment(this)._oldToISOString(); } }
إنها ليست جميلة - وستعمل فقط للحظات التي كانت
تم تحليله في الأصل من سلسلة تاريخ ISO. سيكون أيضًا غير متسق
باستخدام دالة مللي ثانية (). ستكون الفكرة الأفضل هي اعتراض ملف
الاعراب واسحب أي ثواني عشرية إلى خاصية منفصلة على
كائن اللحظة - ثم يمكننا إعادة ذلك حسب الحاجة.

However - I do appreciate that we are moving beyond the scope of the

مكتبة moment.js في هذه المرحلة - لن تكون غلافًا لملف
كائن تاريخ جافا سكريبت.

Perhaps we could make this limitation a little clear in the moment.js

توثيق؟ في الوقت الحالي ، يتم تضمين اقتطاع الميلي ثانية من ملف
رمز المثال ، ولكن لم يتم وصفه بشكل صريح - ولا يوجد تفسير لذلك
لماذا يتصرف بهذه الطريقة.

Thank you for your help Maggie - it is much appreciated.

يعتبر،
بن هاثاوي
مطور برامج
DATUM - المراقبة الجيوتقنية والإنشائية

مرحبًا maggiepint ،

أبحث عن نفسه. بعد تصحيح الأخطاء من خلال moment.js ، لاحظت أنه يستدعي دالة zerofill .

نظرًا لأن القيمة الناتجة عبارة عن سلسلة ، فلا أرى سبب ملئها صفر
على سبيل المثال ، لدي هذا:

const value = 1596099230963;
const formatString = 'MM/DD/YYYY HH:mm:ss.SSSSSS';
const val = moment.utc(value).format(formatString);
console.log(val);

تطبع 07/30/2020 08:53:50.963000 بدلاً من 07/30/2020 08:53:50.963939

علاوة على ذلك ، لاحظت أن الإصدار الأقدم من moment.js لم يقم بتعبئة الصفر ، على سبيل المثال الإصدار 2.5.

سيتعين علي كتابة منسق مخصص الآن للاحتفاظ بالمعلومات الصحيحة في التاريخ ما لم يتم إجراء تغيير على moment.js . أي فرصة يمكننا إجراء هذا التغيير؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات