কিভাবে একটি তারিখ অবজেক্ট ক্লোন করবেন?


498

অন্যটিকে Dateভেরিয়েবল বরাদ্দ করা একই উদাহরণের রেফারেন্সটি অনুলিপি করবে। এর অর্থ একটি পরিবর্তন করা অন্যটির পরিবর্তন করবে change

আমি কীভাবে আসলে Dateউদাহরণটি ক্লোন বা অনুলিপি করতে পারি ?

উত্তর:


737

তারিখ অবজেক্টের getTime()পদ্ধতিটি ব্যবহার করুন , যা 1 জানুয়ারী 1970 সাল থেকে 00:00:00 ( যুগের সময় ) থেকে মিলিসেকেন্ডের সংখ্যা প্রদান করে :

var date = new Date();
var copiedDate = new Date(date.getTime());

সাফারি ৪-তে, আপনি আরও লিখতে পারেন:

var date = new Date();
var copiedDate = new Date(date);

... তবে আমি নিশ্চিত নই যে এটি অন্যান্য ব্রাউজারগুলিতে কাজ করে কিনা। (এটি আই 8 তে কাজ করছে বলে মনে হচ্ছে)।


9
এই স্নিপেটের জন্য জেএসএন? এই লোকগুলির মতো শব্দগুলি তাদের বেসিকগুলি পরিষ্কার হওয়া উচিত ... জাভাস্ক্রিপ্ট ডিওএম-এর জন্য জিকুয়েরি ভুল করে দেওয়ার মতো।
বোল্ডেভিন

17
এই দুর্দান্ত সমাধানটি লেখার আরেকটি উপায় হ'ল তারিখের প্রোটোটাইপটি বাড়ানো: Date.prototype.clone = function() { return new Date(this.getTime()); }; যা আপনি এরপরে ব্যবহার করতে পারবেনcopiedDate = date.clone();
রায়ান

6
copiedDate = new Date(date)আইই 6+ এ পদ্ধতির কাজ করে। ফায়ারফক্সে দুটি অপশন একই গতি।
রায়ান

14
new Date(date)একই হিসাবে new Date(date.getTime()), কারণ জাতীয় কল করার চেষ্টা করবে date.valueOf()যখন এটি একটি সংখ্যা হবে, এবং date.valueOf()হিসাবে একই date.getTime(), রেফারেন্স Date.valueOf Object.valueOf
Steely উইং

10
প্রথম উপায়ে কমপক্ষে ফায়ারফক্স এবং আই (ক্রোম নয়) তারিখের মধ্যে পার্থক্য দেখা দিতে পারে বলে ব্যবহার new Date(date), ব্যবহার new Date(date.getTime()বা new Date(date.valueOf)পরিবর্তে ব্যবহার করবেন না । উদাহরণস্বরূপ toISOString()ফায়ারফক্সে উভয় তারিখ ব্যবহার করে উত্পন্ন হয় "2015-04-21T04:56:42.000Z"এবং "2015-04-21T04:56:42.337Z"
ক্রধ

114

এটিই পরিষ্কার পদ্ধতি

let dat = new Date() 
let copyOf = new Date(dat.valueOf())

console.log(dat);
console.log(copyOf);


9
"তারিখ" অবজেক্টের জন্য "ভ্যালুঅফ ()" পদ্ধতিটি তার "গেটটাইম ()" পদ্ধতি হিসাবে (একই যুগের পরে মিলিসেকেন্ডের সংখ্যা) একই ফলাফল দেয় produces
স্টিভ হ্যারিসন

34
@ স্টিভ: সত্য, তবে গেটটাইম () "চেহারা" দেখতে পেল যেমন এটি কেবল সময় দেয় এবং সেই তারিখটিকেও অন্তর্ভুক্ত করে না তাই "পরিষ্কার" হিসাবে আমার উল্লেখ। স্পষ্টতই জাভাস্ক্রিপ্টে তারিখের ধরণটি বিপর্যয়ের এক অঞ্চল, এটি প্রথম স্থানে কখনও পরিবর্তনযোগ্য হওয়া উচিত ছিল না।
অ্যান্টনিডব্লু জোনস

1
@ অ্যান্টনিডব্লু জোনস: ঠিক আছে, আমি আপনার বক্তব্যটি বুঝতে চাইছি।
স্টিভ হ্যারিসন

3
আমি সম্মত হই যে .valueOf () আরও স্পষ্ট। কখনও কখনও আমি ভুলে গিয়ে আমার কাছে .get মিলিসেকেন্ডগুলি () বি / সি ব্যবহার করি যা মনে হয় এর অর্থ হ'ল মহাকাশকাল থেকে মিলসেকেন্ডগুলি।
টম ওয়েসন

1
স্টিভ হ্যারিসনের কাছে +1: আমি ভাবছিলাম যে বিষয়টি যদি তাই হয় তবে স্পষ্টতার জন্য ধন্যবাদ।
ব্রায়ান লেসি

26
var orig = new Date();
var copy = new Date(+orig);

3
আমি এই সমাধানটি সেরা পছন্দ করি।
আরপুন

3
খুব সুনির্দিষ্ট এবং পরিষ্কার :)
robinmitra

33
+জেএস বিশেষজ্ঞরা ছাড়া সেই যাদুটি কারও সাথে কী করছে তা আপনাকে ব্যাখ্যা করতে হবে ।
স্টিজন ডি উইট

8
:) +চিহ্ন এখানে unaray অপারেটর। এর অর্থ new Date( Number(orig)) । এখানে আরও: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স /

14

সরলীকৃত সংস্করণ:

Date.prototype.clone = function () {
    return new Date(this.getTime());
}

72
আপনি অন্তর্নির্মিত বস্তুগুলির সাথে
গণ্ডগোল

3
আপনার নিজের মালিকানাযুক্ত জিনিসগুলির সাথে আপনি গণ্ডগোল করবেন না। আপনার নতুন সুযোগ তৈরি করে আপনার নতুন কপি তৈরি করা উচিত এবং সুপারডেট বা কিছু কল করা উচিত। বাগের জন্য পরীক্ষার জন্য প্রচুর কঠোরতার কারণে অবজেক্টের কার্যকারিতা অপ্রত্যাশিতভাবে পরিবর্তিত হয়।
রায় ফস

এটি কাজ করবে, তবে রক্ষণাবেক্ষণের কারণে, এই পদ্ধতির কোড গন্ধ হিসাবে বিবেচিত হবে। আমি একটি পন্থা লিখেছি যা আমি সাধারণত আমার কোডিংয়ে ব্যবহার করি: actuts.wordpress.com/2017/01/10/…
অ্যালান চুয়া

1
এছাড়াও আমি প্রথমে বিল্ট-ইনগুলিতে পদ্ধতি যুক্ত করার চেষ্টা করার প্রয়োজনটি দেখতে পাচ্ছি না। কার্যকরী প্রোগ্রামিং অধ্যয়ন করুন এবং আবিষ্কার করুন যে কেন একটি ভাল পুরানো ফ্যাশন ফাংশন আসলে বস্তুর নিজেই পদ্ধতির চেয়ে অনেক বেশি শক্তিশালী। এছাড়া খাটো আছে: const cloneDate = d => new Date(d.getTime())
স্টিজন ডি উইট

6

আমি জানতে পারি যে এই সাধারণ নির্ধারকটিও কাজ করে:

dateOriginal = new Date();
cloneDate = new Date(dateOriginal);

তবে আমি জানি না এটি কতটা "নিরাপদ"। আই 7 এবং ক্রোম 19 এ সাফল্যের সাথে পরীক্ষা করা হয়েছে।


9
প্রথম উপায়ে কমপক্ষে ফায়ারফক্স এবং আই (ক্রোম নয়) তারিখের মধ্যে পার্থক্য দেখা দিতে পারে বলে ব্যবহার new Date(date), ব্যবহার new Date(date.getTime()বা new Date(date.valueOf)পরিবর্তে ব্যবহার করবেন না । উদাহরণস্বরূপ toISOString()ফায়ারফক্সে উভয় তারিখ ব্যবহার করে উত্পন্ন হয় "2015-04-21T04:56:42.000Z"এবং "2015-04-21T04:56:42.337Z"
ক্রধ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.