আমি কীভাবে মুহুর্তের মধ্যে পরিবর্তনের জন্য কাজ করব?


106

আমি এমন একটি সমস্যায় পড়েছি যেখানে আমাকে মুহুর্তের অবজেক্টের প্রাথমিক মানগুলি সংরক্ষণ করতে হবে তবে আমার ভেরিয়েবলটি মূল বস্তুর সাথে পরিবর্তন করতে বাধা দিতে আমার কিছুটা সমস্যা হচ্ছে।

দুর্ভাগ্যক্রমে অবজেক্ট.ফ্রিজে () কাজ করে না, কারণ আমি যখন ফর্ম্যাট করার চেষ্টা করি তখন moment.js একটি "অবৈধ তারিখ" ত্রুটি প্রদান করে।


3
এবং কোডটির মতো দেখাচ্ছে…? আপনি প্রাথমিক মান সংরক্ষণ করতে চান তাহলে, সময় মান ব্যবহার প্রাপ্তিসাধ্য সংরক্ষণ valueOf পদ্ধতি বা নম্বরে অন্তর্নিহিত রূপান্তর।
রবজি

একবার আপনার ভেরিয়েবল সেট হয়ে গেলে সেটি সেট হয়ে যায়, এটি স্বয়ংক্রিয়ভাবে পরিবর্তন হবে না, বরং বার বার সেট না করার জন্য তাকান
জন স্মিথ

উত্তর:


184

এনপিএম - তে একটি মোমেন্ট.জেস প্লাগইন রয়েছে যার নাম হিমশীতল - আপনি তার moment().freeze()জায়গায় ব্যবহার করতে পারেন Object.freeze(moment())

অন্যথায়, ভ্যানিলা মোমেন্ট.জেএস এর একটি cloneপদ্ধতি রয়েছে যা আপনাকে মিউটাইটির সমস্যা এড়াতে সহায়তা করবে, সুতরাং আপনি এরকম কিছু করতে পারেন:

var a = moment(),
    b = a.clone(); // or moment(a)

হালনাগাদ:

এই উত্তরটি লেখার পরে দু'বছর হয়ে গেছে। এই সময়ে, তারিখগুলি নিয়ে কাজ করার জন্য অন্য একটি লাইব্রেরি প্রকাশিত হয়েছে এবং প্রচুর পরিমাণে সন্ধান পেয়েছে: https://date-fns.org/

এই গ্রন্থাগারটি ডিফল্টরূপে অপরিবর্তনীয় এবং একটি মডুলার, কার্যকরী আর্কিটেকচার অনুসরণ করে, যার অর্থ এটি গাছ কাঁপানো এবং ক্লায়েন্ট-সাইড বান্ডিলিংয়ের পক্ষে আরও উপযুক্ত। আপনি যদি এমন কোনও প্রকল্পে কাজ করছেন যা ক্লায়েন্টের পক্ষ থেকে ওয়েবপ্যাকের বিস্তৃত ব্যবহার করে, এবং এটি আবিষ্কার করে যে মোমেন্ট.জেগুলি আপনাকে আপনার বিল্ড নিয়ে সমস্যা দিচ্ছে, বা মোমেন্ট.জেএস'র পরিবর্তনটি আপনাকে প্রচুর মাথা ব্যাথার কারণ করছে, তবে আপনি date-fnsচেষ্টা করা উচিত


ঠিক আছে, আমি পূর্ণ ক্যালেন্ডার প্লাগইনে moment.js ব্যবহার করছি এবং এটি প্রমাণিত হয়েছে যে আমি আমার অনুষ্ঠানের পরবর্তী অবস্থার সাথে মুহূর্তের অবজেক্টের ডেটা পাচ্ছিলাম তার চেয়ে আমার। মিউটেবিলিটি ইস্যু অবশ্যই মুহুর্তের একটি জিনিস are তবে যদিও এই পরামর্শের জন্য আপনাকে অনেক ধন্যবাদ এবং দুঃখিত যে আমি আপনার সময় নষ্ট করেছি।
শেংবো 1618

24
আপনি momentzz = moment(); zz.clone().add(3, 'h').toISOString();
স্টোরেজ

5
মনে রাখবেন যে ডেট-এফএনএসের খুব খারাপ সময় অঞ্চল সমর্থন এবং ইউটিসি তারিখগুলির জন্য কোনও সমর্থন নেই।
মজুপার্পি

3
আমি date-fnsএখন কিছুক্ষণ ব্যবহার করছি তবে সেই মুহুর্ত এবং বালকটি ব্যবহার করে উত্তরাধিকার কোডে ঝাঁপিয়ে পড়তে হয়েছিল, এই পোস্টটি কি আমাকে উইন্ডো থেকে ঝাঁপানো থেকে রক্ষা করেছিল?
ইউশিক

dayjsঅপরিবর্তনীয় প্রকৃতির মোমেন্ট.জেএস এর অনুরূপ এপিআই রয়েছে বলে এটিও একটি ভাল বিকল্প। (মার্চ 2019 পর্যন্ত, এতে টাইমজোন সমর্থন নেই তবে এটি মোটামুটি নতুন গ্রন্থাগার এবং আমি পর্যবেক্ষণ করতে পারি যে কাজ চলছে))
টময়ুকি আওতা

2

এটি একটি পুরানো প্রশ্ন এবং নির্লজ্জ স্ব-প্রচারের জন্য ক্ষমা চাই কারণ এটি আমার উদ্দেশ্য নয়, কেবল আশা করি এটি কাউকে সহায়তা করবে help

রেজারবার্ড যা বলে তা ছাড়াও ( .clone()ইত্যাদি) আমি এনপিএম মডিউল তৈরি করেছি যা মোমেন্ট.জেস বাক্সের বাইরে যা আসে তার সাথে অপরিবর্তনীয় পদ্ধতিগুলি সংযুক্ত করে। উদ্দেশ্যটি কোডটি ভাঙ্গার উদ্দেশ্য নয় তাই মডিউলটি Immuতার নামের সাথে যুক্ত হয়ে নতুন পদ্ধতি যুক্ত করে।

প্রতিটি মুহুর্তে কারখানায় ফিরে আসা প্রতিটি পরিবর্তনযোগ্য পদ্ধতিতে সজ্জিত করা moment().startOf()হবে যেমন সম্পর্কিত হবে startOfImmu(), add()থাকবে addImmu()etc. ইত্যাদি those প্রত্যেকেই নতুন মুহুর্তের পরিবর্তে বিদ্যমান অবস্থার পরিবর্তন করে returns এটি ব্যবহারের জন্য কেবল নতুন পরিবর্তনযোগ্য পদ্ধতিতে অ্যাক্সেস পেতে momentকারখানাটি পাস করুন momentImmutableMethods। উদাহরণ:

var moment = require('moment'); // or moment-timezone 
import { momentImmutableMethods } from 'moment-immutable-methods';

// to decorate instances with immutable methods we need to extend moment factory as below:
momentImmutableMethods(moment);

// now every instance returned by moment will have Immu methods attached.


// IMMUTABLE EXAMPLE
// we using immutable methods that were attached to every instance, these have Immu appended to original name
const ddd = moment({
  hour: 5,
  minute: 10
});
// Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …}
const eee = ddd.startOfImmu('day');
// Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …}
console.log(ddd === eee);
// false
const fff = eee.startOfImmu('month');
// Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …}
console.log(ddd === fff);
// false
console.log(eee === fff);
// false
console.log(ddd.format('DD/MM/YY HH:mma'));
// "14/04/18 05:10am"
console.log(eee.format('DD/MM/YY HH:mma'));
// "14/04/18 00:00am"
console.log(fff.format('DD/MM/YY HH:mma'));
// "08/04/18 00:00am"

এটি এনপিএম-এ https://www.npmjs.com/package/moment-immutable- পদ্ধতিগুলিতে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.