<p>لحظة (). fromNow () إرجاع "تاريخ غير صالح"</p>

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

وصف المشكلة وخطوات إعادة الإنتاج:
أستخدم اللحظة لمعرفة عمر حساب المستخدم ، باستخدام:
moment(user account created date here).fromNow() لكنه يعرض "تاريخ غير صالح". لقد نجح هذا من قبل لكنه لم يعد يعمل. يبدو تاريخ الإنشاء كالتالي: 2018-06-07T22:54:07.310Z .
استخدام moment(date here).format() يعمل بشكل جيد.
يرجى تضمين قيم جميع المتغيرات المستخدمة.
التاريخ الذي أستخدمه للتنسيق والاستخدام من الآن هو 2018-06-07T22:54:07.310Z
بيئة:
بوت الخلاف
أمثلة: Chrome 49 على OSX و Internet Explorer 10 على Windows 7 و Node.JS 4.4.4 على Ubuntu 16.0.4
لا أستخدم اللحظة لأي شيء مذكور أعلاه.
يعتبر كل من المتصفح ونظام التشغيل مهمين بالنسبة لنا ، خاصة إذا كانت لديك بيئة غير معتادة مثل تطبيق IOT.

معلومات أخرى قد تكون مفيدة: https://i.imgur.com/4LFsZh3.png

  • إعداد المنطقة الزمنية للجهاز الذي يعمل الرمز عليه: PST
  • الوقت والتاريخ اللذين تم فيهما تشغيل الكود: 12:20 مساءً ، 10/7/18
  • مكتبات أخرى قيد الاستخدام (TypeScript ، Immutable.js ، إلخ) لا شيء

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

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

الأحد 07 أكتوبر 2018 12:29:05 GMT-0700 (Pacific Daylight Time)
2018-10-7 12:29:05
420
2.22.2
تأكد من أن مشكلتك معزولة عن اللحظة.

Bug

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

شكرا على الرد. أنا أستخدم NodeJS ، لذلك لا توجد بيئة ملاحة.

new Date ()). toString () الخميس 17 يناير 2019 06:53:11 GMT-0600 (التوقيت المركزي القياسي)
تاريخ جديد ()). toLocaleString (): 17/01/2019 ، 6:53:11 صباحًا
تاريخ جديد ()). getTimezoneOffset (): 360
الإصدار: 2.23.0
NodeJS هو v11.6.0

لقد قمت ببعض الاختبارات وكان التعارض هو مُنشئ Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

ال 10 كومينتر

كيف تقوم بتشغيل Discord Bot؟

قلت: _ "هذا عمل من قبل ولكنه لم يعد يعمل" _
هل تغير أي شيء منذ أن نجح - على سبيل المثال ، هل قمت بتحديث البيئة التي يعمل عليها روبوت الفتنة؟ هل تغير تنسيق "تاريخ إنشاء حساب المستخدم"؟

هل أنت قادر على تعديل كود الروبوت الخاص بك لإظهار مخرجات ما يلي (تحديدًا باستخدام السلاسل المشفرة):

console.log('moment.format:', moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', moment("2018-06-07T22:54:07.310Z").fromNow());

كان يعمل قبل ثم توقفت للتو. لم يتغير رمز. لم تتغير البيئة مع الروبوت. تبدو الطريقة التي يتم بها تحليل التواريخ هي نفسها أيضًا.

وإليك ما أخرجته وحدة التحكم ؛

moment.format: 2018-06-07T15:54:07-07:00
moment.fromNow: Invalid date

وإليك طريقة استخدامها ( this.client.moment هو كيف حددت اللحظة):

 console.log('moment.format:', this.client.moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', this.client.moment("2018-06-07T22:54:07.310Z").fromNow());

لست متأكدًا مما إذا كنت أشرت إليه أم لا ، ولكن إليك الإصدارات الحالية التي أستخدمها:
"لحظة": "^ 2.22.2"،
"تنسيق مدة اللحظة": "^ 2.2.2"
وأنا على v8.9.2 من العقدة

أواجه مشكلة مماثلة مع Angular 6 (تطبيق أيوني) وتعيد اللحظة 2.22.2 تاريخًا غير صالح لشيء بسيط مثل هذا.
moment(new Date()).fromNow();
يرجى تقديم النصيحة.

لا يزال يحدث في 2.23.0

time = moment('2017-08-08T18:29:07.000Z')
time.isValid() // true
time.toNow() // Invalid date
time.fromNow() // Invalid date

شكرا لفتح هذا الطلب
مرحبا! شكرا لتقديم هذه القضية! لسوء الحظ ، لا يمكنني إعادة إنتاج هذا. هل يمكنك تقديم أي معلومات أخرى؟

من المفيد تشغيل هذه الخطوط على أجهزتك:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

شكرا على الرد. أنا أستخدم NodeJS ، لذلك لا توجد بيئة ملاحة.

new Date ()). toString () الخميس 17 يناير 2019 06:53:11 GMT-0600 (التوقيت المركزي القياسي)
تاريخ جديد ()). toLocaleString (): 17/01/2019 ، 6:53:11 صباحًا
تاريخ جديد ()). getTimezoneOffset (): 360
الإصدار: 2.23.0
NodeJS هو v11.6.0

لقد قمت ببعض الاختبارات وكان التعارض هو مُنشئ Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

أنا أيضا متأثر بهذا.
في البداية ، اعتقدت أن استخدام طابع زمني غير مكتمل لـ unix (كيف يتم توفير البيانات لي) في المُنشئ هو السبب ، ولكن عند اختبار رمز المثال في وثائق MomentJS ، وجدت أن أي مكالمة إلى fromNow() أعاد Invalid Date .

نفس المشكلة هنا.

toString Tue Jan 07 2020 10:20:09 GMT+0100 (Central European Standard Time)
toLocaleString 1/7/2020, 10:20:09 AM
getTimezoneOffset -60
navigator.userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
moment.version 2.24.0

نفس الشيء هنا على "moment": "^2.24.0", . إنه يعمل بشكل جيد عند تشغيله على المتصفح ولكنه يفشل في nodejs. أي حل بديل حتى يتم إصلاحه؟ marwahaha

إنه اختراق ، لكن يمكنك تغيير ملحقات Object.prototype حتى لا يتم تعدادها:

console.log(moment().fromNow()); // 'a few seconds ago'
Object.prototype.randomExtension = true;
console.log(moment().fromNow()); // 'Invalid date'

Object.keys(Object.prototype).forEach(function(extension) {
  Object.defineProperty(Object.prototype, extension, { enumerable: false });
});

console.log(moment().fromNow()); // 'a few seconds ago'
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات