Moment: توفر Calling moment.utc ("2016-07-01"). year (2013) .toString () التاريخ الخطأ

تم إنشاؤها على ١٣ أكتوبر ٢٠١٧  ·  4تعليقات  ·  مصدر: moment/moment

وصف المشكلة وخطوات إعادة الإنتاج:

يبدو أنه عند تعيين التاريخ إلى تاريخ في الماضي ثم ضبط السنة على أي شيء سوف يدفع التاريخ الناتج ليكون في نهاية الشهر.

إذا اتصلت بـ moment.utc("2016-07-01").year(2013).toString() فستحصل على Wed Jul 31 2013 00:00:00 GMT+0000 . لاحظ كيف أنه 31 يوليو وليس 01 يوليو.

بيئة:

لقد قمت بإعادة إنتاج هذا في Chrome 61 وكذلك في Node 5.10.1

معلومات أخرى قد تكون مفيدة:

يبدو أن هذه مشكلة فقط إذا كنت تستخدم تاريخًا من عام 2016. إذا جربت moment.utc("2015-07-01").year(2013).toString() فهذا يعمل بشكل جيد.

أستطيع أن أؤكد أن هذه ليست مشكلة سابقة للحظة 2.19.0+. إنها فقط مشكلة من 2.19.0+

إذا كنت تبلغ عن مشكلة ، فالرجاء تشغيل الكود التالي في البيئة التي تستخدمها وتضمين الإخراج:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
Thu Oct 12 2017 23:10:36 GMT-0300 (ADT)
10/12/2017, 11:10:36 PM
180
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
2.19.1

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

HolgerFrank هل تمانع في تقديم PR مع التغيير الخاص بك لإصلاح هذا؟ إنه خطأ حرج جدًا يجب إصلاحه في أسرع وقت ممكن ..

تحرير: لقد قدمت PR ، لم أستطع الانتظار.

ال 4 كومينتر

في الإصدار 2.19.0 ، تم تغيير مجموعة الوظائف $ 1 ().

بسبب هذا التغيير ، تعيين سنة جديدة للحظة سنة كبيسة ، فإنه دائمًا ما يعيّن اليوم الأخير من الشهر كتاريخ.

moment('2010-02-25').year(2017) // result is: 2017-02-28
moment('2010-10-15').year(2017) // result is: 2017-10-31

التنفيذ الحالي (غير صحيح)

function set$1 (mom, unit, value) {
    if (mom.isValid() && !isNaN(value)) {
        if (unit === 'FullYear' && isLeapYear(mom.year())) {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
        }
        else {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
        }
    }
}

نظرًا لأن الحالة الخاصة مطلوبة فقط في التاسع والعشرين من فبراير في السنوات الكبيسة ، يجب أن يكون التنفيذ الصحيح:

function set$1 (mom, unit, value) {
    if (mom.isValid() && !isNaN(value)) {
        if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, 1, daysInMonth(value, 1));
        }
        else {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
        }
    }
}

لأن هذا خطأ فادح ، يجب تصحيحه في أسرع وقت ممكن.

آسف لقد لاحظت للتو "يمكنني أن أؤكد أن هذه ليست مشكلة سابقة للحظة 1.19.0+. إنها مشكلة فقط من 1.19.0+" لكنني في الواقع كنت أعني 2.19 ... لقد قمت بتحديث هذا في المنشور الأصلي

HolgerFrank هل تمانع في تقديم PR مع التغيير الخاص بك لإصلاح هذا؟ إنه خطأ حرج جدًا يجب إصلاحه في أسرع وقت ممكن ..

تحرير: لقد قدمت PR ، لم أستطع الانتظار.

إغلاق لصالح العلاقات العامة.

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