জাভাস্ক্রিপ্ট কেন ইয়ার () 108 ফেরত পাবে?


95

এই জাভাস্ক্রিপ্টটি 2008 এর পরিবর্তে 108 টি ফেরত দেয় কেন? এটা দিন এবং মাস সঠিক পায় কিন্তু বছর না?

myDate = new Date();
year = myDate.getYear();

বছর = 108?


30
ওহ, আমরা যে পাপগুলি ওয়াই 2 কে মাধ্যমে পাওয়ার চেষ্টা করেছি
ডিজেন্ট্রি

4
year = myDate.getFullYear() % 100;
অ্যান্ড্রু লারসন

উত্তর:


128

এটি একটি Y2K জিনিস, কেবল 1900 সাল থেকে গণনা করা হয়।

সম্ভাব্য সামঞ্জস্যের সমস্যাগুলি এখন রয়েছে যা কুইরকর্মোড থেকে - এর getYear()পক্ষে স্বীকৃত হয়েছে :getFullYear()

বিষয়টি আরও জটিল করে তুলতে, ডেট.গেটইয়ার () আজকাল হ্রাস করা হয় এবং আপনার ডেট.জেটফুলইয়ার () ব্যবহার করা উচিত, যা পুরানো ব্রাউজারগুলি সমর্থন করে না। এটি যদি কাজ করে তবে এটি সর্বদা পুরো বছর দেওয়া উচিত, অর্থাত্‍। 100 এর পরিবর্তে 2000।

আপনার ব্রাউজারটি এই দুটি পদ্ধতির সাহায্যে নিম্নলিখিত বছরগুলি দেয়:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

ইন্টারনেট এক্সপ্লোরার এবং ফায়ারফক্সের মধ্যে বাস্তবায়নের পার্থক্যও রয়েছে, কারণ আইইএম এর বাস্তবায়নটি আইবিএম থেকে - এর getYear()মতো আচরণ করতে পরিবর্তিত হয়েছিল :getFullYear()

ইসমাস্ক্রিপ্ট স্পেসিফিকেশন অনুসারে, গেটইয়ারটি ১৯৯০ সালে মাইনাসটি ফেরত দেয়, যা মূলত ১৯৯৮-এর জন্য "98" ফিরিয়ে দেয় ear

ইন্টারনেট এক্সপ্লোরার getFearYear () এর মত কাজ করতে এবং এটিকে Y2k- অনুবর্তী করার জন্য getYear () কে পরিবর্তন করেছে, যখন মজিলা স্ট্যান্ডার্ড আচরণ রেখেছিল।


25

যেহেতু getFullYear পুরানো ব্রাউজারগুলিতে কাজ করে না, আপনি এরকম কিছু ব্যবহার করতে পারেন:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

জাভাস্ক্রিপ্ট প্রোটোটাইপ প্রচুর সি # এক্সটেনশন পদ্ধতির মতো বিদ্যমান অবজেক্টগুলিকে প্রসারিত করতে ব্যবহার করা যেতে পারে। এখন, আমরা কেবল এটি করতে পারি;

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

8
হয়তো ডেট.প্রোটোটাইপ.সেটআলিল ইয়ার = ডেট.প্রোটোটাইপ.গেট ফুল ইয়ারের মতো স্মেথ? তারিখ.প্রোটোটাইপ.জিট ফুলইয়ার: ফাংশন () {এটিকে ফিরিয়ে দিন getগেটইয়ার () + 1900; };
ভ্যালেন্টিন গোলভ

12

দস্তাবেজগুলি পরীক্ষা করুন। এটি কোনও ওয়াই 2 কে সমস্যা নয় - এটি ওয়াই 2 কে ইস্যুর অভাব! এই সিদ্ধান্তটি মূলত সি-তে করা হয়েছিল এবং পার্ল, স্পষ্টতই জাভাস্ক্রিপ্ট এবং সম্ভবত বেশ কয়েকটি অন্যান্য ভাষায় অনুলিপি করা হয়েছিল। এই বহু আগে এটি দৃশ্যত এখনও দু-অঙ্কের বছরগুলি ব্যবহার করার পক্ষে আকাঙ্ক্ষিত মনে হয়েছিল, তবে লক্ষণীয় যে এই ইন্টারফেসটি ডিজাইন করেছেন তিনি যে 2000 এবং তার পরেও কী ঘটবে সে সম্পর্কে তাদের চিন্তাভাবনা করা দরকার তা উপলব্ধি করার যথেষ্ট ধারণা ছিল, সুতরাং কেবল শেষ দুটি সরবরাহ করার পরিবর্তে অঙ্কগুলি, তারা 1900 সাল থেকে বছরের সংখ্যা সরবরাহ করেছিল you আপনি যদি হুট করে বা ঝুঁকিপূর্ণ হতে চান তবে আপনি দুটি সংখ্যা ব্যবহার করতে পারেন। অথবা আপনি যদি নিজের প্রোগ্রামটি চালিয়ে যেতে চান, তবে আপনি ফলাফলটিতে ১০০ যোগ করতে এবং পূর্ণ-চার অঙ্কের বছর ব্যবহার করতে পারেন।

আমার মনে আছে আমি প্রথম পার্লে ডেট ম্যানিপুলেশন করেছি। আশ্চর্যজনকভাবে আমি ডক্সটি পড়েছি । স্পষ্টতই এটি কোনও সাধারণ জিনিস নয়। এক-দু'বছর পরে আমি অফিসে ডেকেছিলাম ৩১ ডিসেম্বর, ১৯৯ on সালে কোনও চুক্তি পার্ল কোডের শেষ সম্ভাব্য মুহুর্তে আবিষ্কৃত একটি বাগটি ঠিক করার জন্য অফিসে ডেকে আছি, যে জিনিসটির সাথে আমার কিছু করার দরকার ছিল না। এটি হুবহু ইস্যুটি ছিল: স্ট্যান্ডার্ড ডেট কলটি ১৯০০ সাল থেকে ফিরে এসেছে এবং প্রোগ্রামাররা একে দুই-অঙ্কের বছর হিসাবে ধরেছিল। (তারা ধরে নিয়েছিল যে তারা 2000 সালে "" "পেয়ে যাবেন।) একজন তরুণ অনভিজ্ঞ প্রোগ্রামার হিসাবে, আমার মনটি ফুটিয়ে তুলেছিল যে আমরা" পেশাদার "কাজের জন্য এত বেশি অর্থ প্রদান করতাম, এবং এই লোকেরা এমনকি পড়ার জন্যও বিরক্ত করেনি had ডকুমেন্টেশন। এটি ছিল বহু বছরের মোহের শুরু; এখন আমি বুড়ো ও ছদ্মবেশী। :)

2000 সালে, বার্ষিক YAPC পার্ল সম্মেলনটি এই প্রতিবেদনিত নন-বাগের সম্মানে "YAPC 19100" হিসাবে উল্লেখ করা হয়েছিল।

আজকাল, কমপক্ষে পার্ল বিশ্বে, তারিখ-পরিচালনার জন্য একটি স্ট্যান্ডার্ড মডিউল ব্যবহার করা আরও বেশি অর্থবোধ করে, যা বাস্তব চার-অঙ্কের বছর ব্যবহার করে। জাভাস্ক্রিপ্টের জন্য কী উপলব্ধ তা নিশ্চিত নয়।


4
তিনি ... আমাকে দিলবার্ট কার্টুনের কথা মনে করিয়ে দেয় ... "আপনি ম্যানুয়াল নামে একটি স্প্যানিশ লোকের গল্প পড়েছেন?" ;)
অ্যাডিপ গুপ্ত

আমি বিশ্বাস করি @ এসিপি শপ্পি মানে ইয়য়ারে 1900 যোগ করা () পছন্দসই পুরো বছর উত্পাদন করবে full মাসের মানব পাঠযোগ্য সংখ্যা পুনরুদ্ধার করার সময় এটি ম্যামথ () এ +1 যোগ করার অনুরূপ। উদাহরণ: var ts = নতুন তারিখ (); var fullYear = (ts.getYear () + 1900); তবে getFullYear () ব্যবহার করা পছন্দনীয়। উদাহরণ: var পূর্ণ বছর = নতুন তারিখ ()। GetFullYear ();
পুনরাবৃত্তি করুন


4

ব্যবহার date.getFullYear()

এটি (অন্য কোথাও সঠিকভাবে নির্দেশিত) হ'ল একটি Y2K জিনিস। নেটস্কেপ (2000 এর আগে লেখা) মূলত ফিরে এসেছে, উদাহরণস্বরূপ 98থেকে getYear()। পরিবর্তে ফিরে 00আসার পরিবর্তে, এটি 1002000 সালে ফিরে এসেছিল Then

পরবর্তী বছরগুলিতে ব্রাউজারগুলি getFullYearপুরো বছর ফিরে আসার জন্য একটি স্ট্যান্ডার্ড পদ্ধতি হিসাবে সমর্থন করে ।


3

এই প্রশ্নটি এত পুরানো যে এটি ডটকমের দিনগুলিতে আমাকে নস্টালজিয়ায় কাঁদে!

এটা ঠিক, ডেট.গেটইয়ার () 1900 সাল থেকে পার্লের স্থানীয় সময় () এর মতো বছরের সংখ্যা ফিরে আসে। এক বিস্মিত হয় যে নব্বইয়ের দশকে ডিজাইন করা কোনও ভাষা কেন শতাব্দীর টার্নওভারের জন্য অ্যাকাউন্ট হবে না, তবে আমি কী বলতে পারি? তোমাকে সেখানে থাকতে হবে। এগুলি এ সময়ে এক ধরণের জ্ঞান তৈরি করেছিল (পোষা ডটকমের মতো)।

2000 এর আগে, কেউ গিয়ার ইয়ারের ফলাফলের সাথে "19" যুক্ত করে "বর্ষ 19100 বাগ" এর ফলে এই বাগটি ঠিক করার প্রলোভন পেয়েছিল । অন্যরা ইতিমধ্যে এই প্রশ্নের যথেষ্ট উত্তর দিয়েছেন (গেটডেটের ফলাফলের সাথে 1900 যোগ করুন)।

আপনি যে বইটি জাভাস্ক্রিপ্ট সম্পর্কে পড়ছেন তা কি একটু পুরাতন?

অতীত থেকে বিস্ফোরণের জন্য ধন্যবাদ!


ভাষা (পার্ল) এর জন্য অ্যাকাউন্ট না দেওয়ার কারণ হ'ল এটি অন্ধভাবে সি ডিজাইনের সিদ্ধান্তটি অনুলিপি করে অনুলিপি করেছিল যা খুব আগে করা হয়েছিল। (20 বছর?)
স্কিপফোপি

আমি জাভাস্ক্রিপ্টে ছায়া ফেলছিলাম, পার্লকে নয়। পার্ল প্রায়শই সরাসরি অন্তর্নিহিত সি রুটিনগুলি প্রকাশ করে। যেমন আপনি বলেছেন, এটি তার সময়ের একটি পণ্য। কমপক্ষে এক দশক পরে ডিজাইন করা জেএস অন্য কোনও পথে যেতে পারত।
jjohn

2

আপনার, যেমন উল্লেখ করা হয়েছে, কখনও ব্যবহার করা উচিত নয়, getYear()পরিবর্তে ব্যবহার করা উচিত getFullYear()

গল্প কিন্তু "হিসাবে ইন্টারনেট কার্যকরী সহজ হিসাবে নয় GetYear()যেমন getFullYear()। অপেরা এবং ইন্টারনেট এই দিন চিকিত্সা getYear()হিসাবে getYear()মূলত 2000 সামনে তারিখগুলি জন্য নিদিষ্ট করা হয়, কিন্তু যেমন বিবেচনা করবে getFullYear()2000 পর তারিখগুলি জন্য, যখন WebKit এবং পুরানো আচরণ সঙ্গে ফায়ারফক্স লাঠি

এটি সমস্ত ব্রাউজারে 99 আউটপুট দেয়:

javascript:alert(new Date(917823600000).getYear());

এটি এফএফ / ওয়েবকিট-এ 108 এবং অপেরা / আইই-তে 2008 আউটপুট দেয়:

javascript:alert(new Date().getYear());




0

অন্যদের বলেছেন, এটি 1900 কারণেই এটা আছে যেহেতু বছরের গণনায় ফেরৎ যে যে যখন জাভাস্ক্রিপ্ট মধ্য 90s মধ্যে আবিষ্কৃত হয়, যে আচরণ উভয় সুবিধাজনক এবং অন্যান্য ভাষায় তারিখ-সময় API গুলির সাথে সামঞ্জস্যপূর্ণ ছিল না। বিশেষত সি এবং অবশ্যই, একবার এপিআই প্রতিষ্ঠিত হওয়ার পরে তারা পিছনের সামঞ্জস্যের কারণে এটি পরিবর্তন করতে পারেনি।


0

বিটিডাব্লু, বিভিন্ন ব্রাউজারগুলি বিভিন্ন ফলাফল দিতে পারে, তাই এই ফাংশনটি পুরোপুরি এড়িয়ে যাওয়া এবং getFullYear () সর্বদা ব্যবহার করা ভাল।


0

var তারিখ_ওজেক্ট = নতুন তারিখ (); বার বছর = তারিখ_মজেক্ট.জেটইয়ার (); যদি (বছর <2000) {বছর = বছর + 1900; } // আপনি পুরো বছর পাবেন ...


-1

এটি 4 ডিজিট বছর - 1900 ফিরছে, যা 9+ বছর আগে শীতল হতে পারে, তবে এখন বেশ পিছিয়ে রয়েছে। জাভা এর java.util.Date এটিও করে।

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