জাভাস্ক্রিপ্ট সময় সহ একটি অনন্য নম্বর তৈরি করুন


101

জাভাস্ক্রিপ্ট ব্যবহার করে ফ্লাইতে আমার অনন্য আইডি নম্বর উত্পন্ন করতে হবে। অতীতে, আমি সময় ব্যবহার করে একটি সংখ্যা তৈরি করে এটি করেছি। সংখ্যাটি চার অঙ্কের বছর, দুই অঙ্কের মাস, দুই অঙ্কের দিন, দুই অঙ্কের ঘন্টা, দুই অঙ্কের মিনিট, দুই অঙ্ক সেকেন্ড এবং তিন অঙ্কের মিলিসেকেন্ড নিয়ে গঠিত। সুতরাং এটি এর মতো কিছু লাগবে: 20111104103912732 ... এটি আমার উদ্দেশ্যগুলির জন্য একটি অনন্য সংখ্যার যথেষ্ট নিশ্চিততা দেবে।

এটি করার পরে অনেকক্ষণ হয়ে গেছে এবং আমার আর কোড নেই। কারও কাছে এটি করার কোড আছে, বা একটি অনন্য আইডি তৈরির জন্য আরও ভাল পরামর্শ আছে?



আপনি বিবেচনা করেছেন new Date().toISOString ()?
গ্যাসপার্ড

উত্তর:


68

আপনি যদি কেবল একটি অনন্য-ইশ নম্বর চান, তবে

var timestamp = new Date().getUTCMilliseconds();

আপনি একটি সহজ নম্বর পেতে হবে। তবে আপনার যদি পঠনযোগ্য সংস্করণ প্রয়োজন হয় তবে আপনি কিছুটা প্রসেসিংয়ের জন্য রয়েছেন:

var now = new Date();

timestamp = now.getFullYear().toString(); // 2011
timestamp += (now.getMonth < 9 ? '0' : '') + now.getMonth().toString(); // JS months are 0-based, so +1 and pad with 0's
timestamp += ((now.getDate < 10) ? '0' : '') + now.getDate().toString(); // pad with a 0
... etc... with .getHours(), getMinutes(), getSeconds(), getMilliseconds()

4
@ অ্যাক্সেল: আমি এটি অনন্য বলিনি, আমি বলেছিলাম এটি "অনন্য-ইশ"। অবশ্যই একটি টাইমস্ট্যাম্প উত্পাদিত ক্লায়েন্ট-সাইডটি ব্যবহার করে ডুপ তৈরি করবে।
মার্চ বি

79
টাইমস্ট্যাম্প হওয়া উচিত আয় 0 এবং 999. এর মধ্যে একটি সংখ্যা 1 ম জানুয়ারি 1970 (স্বাভাবিক টাইমস্ট্যাম্প) যেহেতু আয় মিলিসেকেন্ড। w3schools.com/jsref/jsref_obj_date.aspnew Date().getTime();date.getUTCMilliseconds()date.getTime()
অটোমেটিক

8
-1, যেহেতু প্রশ্নটি ছিল অনন্য নম্বর সম্পর্কে । কোডের প্রথম ব্লকটি পুরোপুরি বাদ দেওয়া উচিত।
অ্যান্ড্রে

এটি 2 অনন্য মূল্যবোধ উত্পন্ন করতে পারে:function foo1() {console.log(new Date().getUTCMilliseconds()); console.log(new Date().getUTCMilliseconds()); }
শারিকভ ভ্লাদিস্লাভ

10
getUTC মিলিসেকেন্ডস The value returned by getUTCMilliseconds() is an integer between 0 and 999.। এটি অনন্য আইডির জন্য সবচেয়ে খারাপ ধারণা, প্রথম অনুচ্ছেদটি সরানো উচিত।
গ্যাসপার্ড

120

একটি ভাল পদ্ধতির হবে:

new Date().valueOf();

পরিবর্তে

new Date().getUTCMilliseconds();

মান " ( " সম্ভবত "একটি অনন্য সংখ্যা। http://www.w3schools.com/jsref/jsref_valueof_date.asp


19
এটি কোনও অনন্য সংখ্যা নয় .. মিলিসেকেন্ডগুলি অনন্য হিসাবে বিবেচিত হওয়ার জন্য যথেষ্ট পরিমাণে দানাদার নয়।
বংশী মোহন জয়ন্তী

4
বা সহজভাবে+new Date()
thdoan

4
আমি কেবল লুপের জন্য দৌড়েছি এবং এর সাথে আমি সদৃশ ফলাফল পেয়েছি valueOf()। আমি কেবল এটি ব্যবহার করি - +performance.now().toString().replace('.', 7) developer.mozilla.org/en-US/docs/Web/API/Performance/
اوس

4
@ ইতজিকবেনহট্ট সমান মূল্যের চেয়ে তিনগুণ পেয়েছেন। মাল্টি-কোর সিপিইউ ব্যবহার করে, সম্ভবত থ্রেড সহ একটি রেসের শর্ত।
যে-বেন

73

এমন একটি সংখ্যা তৈরির সংক্ষিপ্ততম উপায় যা আপনি বেশ নিশ্চিত হতে পারেন যতটা পৃথক উদাহরণ হিসাবে আপনি ভাবতে পারেন তার মধ্যে অনন্য হবে

Date.now() + Math.random()

যদি ফাংশন কলটিতে 1 মিলিসেকেন্ডের পার্থক্য থাকে তবে এটি একটি আলাদা নম্বর উত্পন্ন করার 100% গ্যারান্টিযুক্ত । একই মিলিসেকেন্ডের মধ্যে ফাংশন কলগুলির জন্য আপনি কেবল তখনই উদ্বিগ্ন হওয়া শুরু করতে পারেন যদি আপনি এই মিলিসেকেন্ডের মধ্যে কয়েক মিলিয়ন সংখ্যক বেশি সংখ্যা তৈরি করেন যা খুব সম্ভবত সম্ভাব্য নয়।

একই মিলিসেকেন্ডের মধ্যে পুনরাবৃত্তি নম্বর পাওয়ার সম্ভাবনা সম্পর্কে আরও জানতে https://stackoverflow.com/a/28220928/4617597 দেখুন


7
এছাড়াও, আপনি যদি এলোমেলো সংখ্যার সমস্ত বিট রাখতে চান তবে আপনি সেগুলি আলাদা আলাদাভাবে উত্পন্ন করতে পারেন এবং স্ট্রিং হিসাবে একত্রীকরণ করতে পারেন: নতুন তারিখ ()। মান মানিফ ()। টু স্ট্রিং (36) + ম্যাথ.রেন্ডম ()। টু স্ট্রিং (36) (২) এটি আপনাকে একটি ১৯ টি চরিত্রের আলফানিউমেরিক স্ট্রিং দেয় যা আন্তঃবিদ্যুতের এক শালীন পরিমাণ। এর অর্ধেক হলেও অনুমানযোগ্য।
এরিক পুকিনস্কিস

4
এটি অন্যান্য গ্রহণযোগ্য উত্তরগুলির চেষ্টা করার মতো গ্রহণযোগ্য উত্তর হওয়া উচিত, একটি অ্যাসিঙ্ক ফাংশন থেকে কল করার সময় আমি একক সারিতে 2 এবং এমনকি 3 গুণ একই মূল্য পেয়েছিলাম। এটি একটি সাধারণ 8-কোর সিপিইউর জন্য একই মুহুর্তে 8 টি অনন্য স্ট্রিং উত্পন্ন করতে যথেষ্ট র্যান্ডমনেস সরবরাহ করে বলে মনে হচ্ছে, আমার ব্যবহারের পক্ষে যথেষ্ট ভাল।
সেই-বেন

সেরা এক:Date.now() + '' + Math.random()
এনএসডি

Date.now()অংশটি অকেজো হবে যখন এটি একটি সাধারণ / দ্রুত লুপের অভ্যন্তরে থাকবে
এপু

24

এটি নিম্নলিখিত কোড সহ সহজভাবে অর্জন করা যেতে পারে:

var date = new Date();
var components = [
    date.getYear(),
    date.getMonth(),
    date.getDate(),
    date.getHours(),
    date.getMinutes(),
    date.getSeconds(),
    date.getMilliseconds()
];

var id = components.join("");

6
যদি এটি একই মিলিসেকেন্ডে দু'বার বলা হয় তবে কী হবে?
টিবিই

4
আসলে, তবে এটি অপের পক্ষে ঠিক ছিল: "এটি আমার উদ্দেশ্যগুলির জন্য একটি অনন্য সংখ্যার যথেষ্ট নিশ্চিততা দেবে।"
আগস্ট লিলিয়াস

18

সংখ্যার গুচ্ছের চেয়ে ছোট কিছু চাইলে আমি যা করি তা এখানে - পরিবর্তন বেস change

var uid = (new Date().getTime()).toString(36)

4
@ ব্লুশ্র্ট সত্য, এটি বিরল সংঘর্ষের কারণ হতে পারে। আপনি কোড. google.com/p/crypto-js এর মতো কিছু ব্যবহার করে টাইমস্ট্যাম্পটি md5 করতে পারেন , তবে আমার উদ্দেশ্যগুলির জন্য এটি ছিল "যথেষ্ট অনন্য" এবং আরও গুরুত্বপূর্ণভাবে, দ্রুত।
ফ্রম্বার্ট

@ ফ্রাবার্ট, এটি নির্ভর করে। MD5 সংঘর্ষ প্রতিরোধী হয় না। তবে আপনার ক্ষেত্রে আমি খুব দ্রুত সমস্যায় পড়েছি টুস্ট্রিংয়ের কারণে (৩)) যা আমি মনে করি যে এটির সংখ্যাগত মানটিকে এটি এসসিআই উপস্থাপনায় রূপান্তর করে, যদিও নিশ্চিত নয়, তবে আমি সমস্যাটি দেখতে পাচ্ছি, যদি আপনি আপনার ইউইড জেনারেটরকে প্রায়শই যথেষ্ট কল করেন তবে কেবল শেষ 3 চরগুলি পরিবর্তন হচ্ছে তাই সম্ভাবনা বেশি যে আপনি কোনও সংঘর্ষে পড়বেন। আপনি কেবল নতুন ডেট.জেটটাইম () কলগুলিতে লেগে থাকলে আপনি আরও ভাল প্রতিকূলতা পান। তবে ওহে যদি এটি আপনার উদ্দেশ্যগুলির জন্য কাজ করে তবে কোনও সমস্যা নেই, আমার এটি কেবল আমার ক্লায়েন্টের সাইড কোডের জন্য কিছু অনন্য আইডির জন্য প্রয়োজন, ইউইউড নোড লাইব ব্যবহার করে শেষ হয়েছিল।
blushrt

আমি এটাকে ভালবাসি! (Date.now() + Math.random()).toString(36)মিলিসেকেন্ড সংঘর্ষ প্রতিরোধে আমি এটিকে সামঞ্জস্য করেছি । এটি সংক্ষিপ্ত এবং "k92g5pux.i36" জাতীয় কিছু তৈরি করে
এডওয়ার্ড

16

এটি একটি Dateউদাহরণ তৈরি করার চেয়ে দ্রুত সম্পাদন করে , কম কোড ব্যবহার করে এবং সর্বদা একটি অনন্য নম্বর উত্পাদন করবে (স্থানীয়ভাবে):

function uniqueNumber() {
    var date = Date.now();

    // If created at same millisecond as previous
    if (date <= uniqueNumber.previous) {
        date = ++uniqueNumber.previous;
    } else {
        uniqueNumber.previous = date;
    }

    return date;
}

uniqueNumber.previous = 0;

জেএসফিডাল: http://jsfiddle.net/j8aLocan/

আমি এটি টাওয়ার এবং এনএমপিতে প্রকাশ করেছি: https://github.com/stevenvachon/unique-number

অ-সংখ্যা তৈরি করতে আপনি আরও কিছু বিস্তৃত যেমন cuid , পুড বা সংক্ষিপ্ত হিসাবে ব্যবহার করতে পারেন ।


4
আমার কাছে মনে হচ্ছে এলোমেলো সংখ্যা যুক্ত করা আসলে এটি কম প্রুফ প্রমাণ হিসাবে তৈরি করবে। শুধু টাইম স্ট্যাম্পের সাথে একই সংখ্যার জন্য একই মিলসেকেন্ডে দুটি সংখ্যা তৈরি করতে হবে। দুটি এলোমেলো সংখ্যার যোগ করে, আপনি এখন অঙ্কের অনেক সংমিশ্রণ তৈরি করেছেন, গণিতের কারণে, এটি বহুগুণে যখন একই ফলাফলের সাথে শেষ হতে পারে। আমি জানি এটা অসম্ভব, কিন্তু ... এটা ঠিক না?
ফিল

হুঁ, হ্যাঁ সম্ভবত আমার উত্তর এবং আব্বার এর উত্তর একটি সংমিশ্রণ সেরা হবে।
স্টিভেন ওয়াচন

আমার উত্তর আপডেট। চিন্তার জন্য ধন্যবাদ।
স্টিভেন ওয়াচন

4
ভাল চেষ্টা, আপনার উত্তরটি বেছে নেওয়ার চেষ্টা না করা ... তবে এই নতুন সমাধানটি আসলে "একই মিলিসেকেন্ডে তৈরি একাধিক আইডি" সমস্যাটি সমাধান করে না কারণ, আপনি জানেন .. এটি জাভাস্ক্রিপ্ট, ক্লায়েন্টের পাশেই। যদি ভিন্ন ব্যবহারকারী একই মিলসেকেন্ডে একটি সংখ্যা তৈরি করে থাকে তবে এটি 'অনন্য' ব্যবহারকারীর চেয়ে অনন্য নাম্বারে প্রদর্শিত হবে না vious যদি আপনি এটি অন্য কোথাও সার্ভারে সঞ্চয় না করেন এবং স্বতন্ত্রতার জন্য পরীক্ষা করেন না ... তবে এর মতো খাঁটি জেএস-ভিত্তিক সমাধানটি কোনও অনন্য নম্বর তৈরি করছে তা নিশ্চিত হওয়া যায় না।
ফিল

ঠিক আছে, এটি একটি অনন্য সংখ্যার চেয়ে আরও বিস্তৃত সিস্টেম হবে।
স্টিভেন ওয়াচন

12

আমি ব্যবহার করি

Math.floor(new Date().valueOf() * Math.random())

সুতরাং কোনও সুযোগে যদি কোডটি একই সাথে চালিত হয় তবে একটি দু: খজনক সম্ভাবনাও রয়েছে যে এলোমেলো সংখ্যা একই হবে।


নিশ্চিত না যে new Date()দরকারী কার্যকর। আপনি দুটি পৃথক তারিখের সাথে একই নম্বরগুলি পেতে পারেন
জেমেলিন

4
আমি বলতে চাইছি, এটা সহজভাবে করার চেয়ে কীভাবে ভাল Math.random()?
জেমেলিন

7

এটি করা উচিত:

var uniqueNumber = new Date().getTime(); // milliseconds since 1st Jan. 1970

4
অনেক ক্ষেত্রে কার্যকর, যদিও এটি সত্যিই খাঁটি "অনন্য" আইডি তৈরি করে না, যদি এই ফাংশনটিকে একই মিলিসেকেন্ডে একাধিকবার বলা হয় ... তবে যাইহোক, ব্যবহারকারী এবং ইউআই ইন্টারেক্টের জন্য এটি ভাল good
বেনিয়ামিন পিট

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। প্রচুর অপ্রাসঙ্গিক বিড়ম্বনা যা কঠিন এবং অপ্রয়োজনীয়, এবং এই উত্তরটি প্রতি মিলিসেকেন্ডে অনন্য সময় দেয়।
জিন খ।

6

যদি আপনি কয়েক মিলি সেকেন্ড পরে একটি অনন্য নম্বর চান তবে ব্যবহার করুন Date.now(), আপনি যদি এটির অভ্যন্তরে এটি ব্যবহার করতে চান for loopতবে Date.now() and Math.random()একসাথে ব্যবহার করুন

লুপের জন্য একটি অনন্য নম্বর

function getUniqueID(){
    for(var i = 0; i< 5; i++)
      console.log(Date.now() + ( (Math.random()*100000).toFixed()))
}
getUniqueID()

আউটপুট :: সমস্ত সংখ্যা অনন্য

15598251485988384 155982514859810330 155982514859860737 155982514859882244 155982514859883316

অনন্য নম্বর ছাড়া Math.random()

function getUniqueID(){
        for(var i = 0; i< 5; i++)
          console.log(Date.now())
    }
    getUniqueID()

আউটপুট :: সংখ্যা পুনরাবৃত্তি হয়

1559825328327 1559825328327 1559825328327 1559825328328 1559825328328


4

অনলাইন তদন্ত থেকে আমি নিম্নলিখিত বিষয়টি নিয়ে এসেছি যা প্রতি সেশনের জন্য একটি অনন্য আইডি তৈরি করে:

        window.mwUnique ={
        prevTimeId : 0,
        prevUniqueId : 0,
        getUniqueID : function(){
            try {
                var d=new Date();
                var newUniqueId = d.getTime();
                if (newUniqueId == mwUnique.prevTimeId)
                    mwUnique.prevUniqueId = mwUnique.prevUniqueId + 1;
                else {
                    mwUnique.prevTimeId = newUniqueId;
                    mwUnique.prevUniqueId = 0;
                }
                newUniqueId = newUniqueId + '' + mwUnique.prevUniqueId;
                return newUniqueId;                     
            }
            catch(e) {
                mwTool.logError('mwUnique.getUniqueID error:' + e.message + '.');
            }
        }            
    }

এটি কিছু লোকের পক্ষে সহায়ক।

চিয়ার্স

অ্যান্ড্রু


এই প্রশ্নটি সম্পর্কে এটি তারিখের সবচেয়ে সহজ এবং ত্রুটি প্রমাণ সমাধান। আমি একটি পৃথক সমাধান চেষ্টা করেছি (নীচে দেখুন), তবে এটি নিয়ে আমার এখনও কিছু উদ্বেগ রয়েছে যার আরও বিকাশ প্রয়োজন।
loretoparisi

3

এটিও করা উচিত:

(function() {
    var uniquePrevious = 0;
    uniqueId = function() {
        return uniquePrevious++;
    };
}());

খুব অনুরূপ বাস্তবায়ন আপনি লড্যাশ ইউনিকআইড ফাংশনে খুঁজে পেতে পারেন, আমার জন্য, আপনার সমাধানটি সহজ এবং পরিষ্কার।
কামিল নাজা

3

ES6 এ:

const ID_LENGTH = 36
const START_LETTERS_ASCII = 97 // Use 64 for uppercase
const ALPHABET_LENGTH = 26

const uniqueID = () => [...new Array(ID_LENGTH)]
  .map(() => String.fromCharCode(START_LETTERS_ASCII + Math.random() * ALPHABET_LENGTH))
 .join('')

উদাহরণ:

 > uniqueID()
 > "bxppcnanpuxzpyewttifptbklkurvvetigra"

2

জেএস-এ সর্বদা অনন্য আইডি পান

function getUniqueId(){
   return (new Date().getTime()).toString(36) + new Date().getUTCMilliseconds();
}

getUniqueId()    // Call the function

------------results like

//"ka2high4264"

//"ka2hj115905"

//"ka2hj1my690"

//"ka2hj23j287"

//"ka2hj2jp869"

এটি সত্যই অনন্য মান দেবে না, এই কোডটি দিয়ে চেষ্টা করুন[1,2,3,5,6,7,8,9,10].map(item => getUniqueId());
এপু

2

2020-এ, আপনি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো মান উত্পন্ন করতে ইন-ব্রাউজার ক্রিপ্টো এপিআই ব্যবহার করতে পারেন ।

function getRandomNumbers() {
  const typedArray = new Uint8Array(10);
  const randomValues = window.crypto.getRandomValues(typedArray);
  return randomValues.join('');
}

console.log(getRandomNumbers());
// 1857488137147725264738

উভয়ই ইউএনটি 8আরাই এবং ক্রিপ্টো.জেটআর্যান্ডমভ্যালুগুলি আইই 11 সহ সমস্ত বড় ব্রাউজারগুলিতে সমর্থিত


1

আমার নিজের ভবিষ্যতের রেফারেন্সের জন্য এই কোড স্নিপেট এখানে পোস্ট করা (গ্যারান্টিযুক্ত নয় তবে সন্তোষজনক "অনন্য" যথেষ্ট):

// a valid floating number
window.generateUniqueNumber = function() {
    return new Date().valueOf() + Math.random();
};

// a valid HTML id
window.generateUniqueId = function() {
    return "_" + new Date().valueOf() + Math.random().toFixed(16).substring(2);
};

1

এটি একটি প্রায় গ্যারান্টিযুক্ত অনন্য 32 টি অক্ষরের কী ক্লায়েন্টের দিক তৈরি করে, যদি আপনি কেবল সংখ্যক "অক্ষর" ভের পরিবর্তন করতে চান।

var d = new Date().valueOf();
var n = d.toString();
var result = '';
var length = 32;
var p = 0;
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

for (var i = length; i > 0; --i){
    result += ((i & 1) && n.charAt(p) ? '<b>' + n.charAt(p) + '</b>' : chars[Math.floor(Math.random() * chars.length)]);
    if(i & 1) p++;
};

https://jsfiddle.net/j0evrdf1/1/


1

এটি ব্যবহার করুন: জাভাস্ক্রিপ্টে অনন্য নম্বর তৈরি করার জন্য

var uniqueNumber=(new Date().getTime()).toString(36);

এটা সত্যিই কাজ করেছে. :)


1
    function UniqueValue(d){
        var dat_e = new Date();
        var uniqu_e = ((Math.random() *1000) +"").slice(-4)

        dat_e = dat_e.toISOString().replace(/[^0-9]/g, "").replace(dat_e.getFullYear(),uniqu_e);
        if(d==dat_e)
            dat_e = UniqueValue(dat_e);
        return dat_e;
    }

কল 1: ইউনিকভ্যালু ('0')
কল 2: ইউনিকভ্যালু (ইউনিকভ্যালু ('0')) // জটিল হবে

নমুনা আউটপুট:
জন্য (Var i = 0; আমি <10; আমি ++,) {console.log (UniqueValue (UniqueValue ( '0')));}
60950116113248802
26780116113248803
53920116113248803
35840116113248803
47430116113248803
41680116113248803
42980116113248804
34750116113248804
20950116113248804
03730116113248804


1

যেহেতু মিলিসেকেন্ডগুলি নোডে প্রতিটি মিলিসেকেন্ড আপডেট হয় না, নিম্নলিখিতটি একটি উত্তর। এটি একটি অনন্য মানব পাঠযোগ্য টিকিট নম্বর উত্পন্ন করে। আমি প্রোগ্রামিং এবং নোডেজে নতুন। আমি ভুল হলে আমাকে সংশোধন করুন।

function get2Digit(value) {
if (value.length == 1) return "0" + "" + value;
else return value;

}

function get3Digit(value) {
if (value.length == 1) return "00" + "" + value;
else return value;

}

function generateID() {
    var d = new Date();
    var year = d.getFullYear();
    var month = get2Digit(d.getMonth() + 1);
    var date = get2Digit(d.getDate());
    var hours = get2Digit(d.getHours());
    var minutes = get2Digit(d.getMinutes());
    var seconds = get2Digit(d.getSeconds());
    var millSeconds = get2Digit(d.getMilliseconds());
    var dateValue = year + "" + month + "" + date;
    var uniqueID = hours + "" + minutes + "" + seconds + "" + millSeconds;

    if (lastUniqueID == "false" || lastUniqueID < uniqueID) lastUniqueID = uniqueID;
    else lastUniqueID = Number(lastUniqueID) + 1;
    return dateValue + "" + lastUniqueID;
}

1
let uuid = ((new Date().getTime()).toString(36))+'_'+(Date.now() + Math.random().toString()).split('.').join("_")

নমুনা ফলাফল "k3jobnvt_15750033412250_18299601769317408"


0

ধরে নেওয়া হয়েছে যে প্রস্তাবিত সমাধানটি @ বারবার সমাধানটি এটি একটি ভাল সমাধান কারণ (new Date()).getTime()এটির জন্য উইন্ডোজ মিলিসেকেন্ড এবং সমষ্টি একটিtick এই বিরতিতে সংঘর্ষের ক্ষেত্রে , আমরা বিল্ট-ইন ব্যবহার করার জন্য বিবেচনা করতে পারি যেহেতু আমরা এখানে স্পষ্টভাবে দেখতে পাচ্ছি:

মুষ্টি আমরা এখানে দেখতে পাচ্ছি যে কীভাবে 1/1000 উইন্ডো ফ্রেমে ব্যবহার করে সংঘর্ষ হতে পারে (new Date()).getTime() :

console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1155:1 1469615396590
VM1155:1 1469615396591
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1156:1 1469615398845
VM1156:1 1469615398846
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1158:1 1469615403045
VM1158:1 1469615403045

দ্বিতীয়ত আমরা প্রস্তাবিত সমাধানটি চেষ্টা করি যা 1/1000 উইন্ডোতে সংঘর্ষ এড়ায়:

console.log( window.mwUnique.getUniqueID() ); console.log( window.mwUnique.getUniqueID() ); 
VM1159:1 14696154132130
VM1159:1 14696154132131

এটি বলেছিল যে আমরা নোডের মতো ফাংশনগুলি ব্যবহার করতে বিবেচনা করতে পারি process.nextTickযা ইভেন্ট লুপকে একক হিসাবে ডাকা হয় tickএবং এটি এখানে ভালভাবে ব্যাখ্যা করা হয়েছে । অবশ্যই ব্রাউজারে process.nextTickতাই নেই যে আমাদের কীভাবে এটি করতে হবে তা নির্ধারণ করতে হবে। এই বাস্তবায়ন একটি ইনস্টল করবে nextTickব্রাউজার আছে মধ্যে ইনপুট / আউটপুট সবচেয়ে কাছাকাছি ফাংশন ব্যবহার করে ব্রাউজারে ফাংশন setTimeout(fnc,0), setImmediate(fnc), window.requestAnimationFrameএখানে প্রস্তাবিত হিসাবে আমরা এটি যুক্ত করতে পারি window.postMessage, তবে আমি এটি পাঠকের কাছে রেখেছি কারণ এটির একটি দরকারaddEventListener পাশাপাশি । মূল মডিউল সংস্করণগুলি এখানে সরল রাখতে আমি সংশোধন করেছি:

getUniqueID = (c => {
 if(typeof(nextTick)=='undefined')
nextTick = (function(window, prefixes, i, p, fnc) {
    while (!fnc && i < prefixes.length) {
        fnc = window[prefixes[i++] + 'equestAnimationFrame'];
    }
    return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};
})(window, 'r webkitR mozR msR oR'.split(' '), 0);
 nextTick(() => {
   return c( (new Date()).getTime() )  
 })
})

সুতরাং আমরা 1/1000 উইন্ডোতে আছে:

getUniqueID(function(c) { console.log(c); });getUniqueID(function(c) { console.log(c); });
undefined
VM1160:1 1469615416965
VM1160:1 1469615416966

0

গেটটাইম () বা ভ্যালুঅফ () ব্যবহার করা আরও ভাল হতে পারে তবে এটি অনন্য এবং আরও বেশি বোধগম্য সংখ্যার (তারিখ এবং সময় উপস্থাপন করে) ফেরত দেয়:

window.getUniqNr = function() {
  var now = new Date(); 
  if (typeof window.uniqCounter === 'undefined') window.uniqCounter = 0; 
  window.uniqCounter++; 
  var m = now.getMonth(); var d = now.getDay(); 
  var h = now.getHours(); var i = now.getMinutes(); 
  var s = now.getSeconds(); var ms = now.getMilliseconds();
  timestamp = now.getFullYear().toString() 
  + (m <= 9 ? '0' : '') + m.toString()
  +( d <= 9 ? '0' : '') + d.toString() 
  + (h <= 9 ? '0' : '') + h.toString() 
  + (i <= 9 ? '0' : '') + i.toString() 
  + (s <= 9 ? '0' : '') + s.toString() 
  + (ms <= 9 ? '00' : (ms <= 99 ? '0' : '')) + ms.toString() 
  + window.uniqCounter; 

  return timestamp;
};
window.getUniqNr();

0
let now = new Date();
let timestamp = now.getFullYear().toString();
let month = now.getMonth() + 1;
timestamp += (month < 10 ? '0' : '') + month.toString();
timestamp += (now.getDate() < 10 ? '0' : '') + now.getDate().toString();
timestamp += (now.getHours() < 10 ? '0' : '') + now.getHours().toString();
timestamp += (now.getMinutes() < 10 ? '0' : '') + now.getMinutes().toString();
timestamp += (now.getSeconds() < 10 ? '0' : '') + now.getSeconds().toString();
timestamp += (now.getMilliseconds() < 100 ? '0' : '') + now.getMilliseconds().toString();



0
function getUniqueNumber() {

    function shuffle(str) {
        var a = str.split("");
        var n = a.length;
        for(var i = n - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            var tmp = a[i];
            a[i] = a[j];
            a[j] = tmp;
        }
        return a.join("");
    }
    var str = new Date().getTime() + (Math.random()*999 +1000).toFixed() //string
    return Number.parseInt(shuffle(str));   
}

0

উপরে # মার্সেলো লাজারোনি সমাধানের প্রসঙ্গে

Date.now() + Math.random()

এই 1567507511939.4558 (4 দশমিকের মধ্যে সীমাবদ্ধ) এর মতো একটি নম্বর প্রদান করে এবং প্রতি 0.1% অ-অনন্য নম্বর (বা সংঘর্ষ) দেবে।

স্ট্রিং () এ যুক্ত করে এটি ঠিক করে

Date.now() + Math.random().toString()

'15675096840820.04510962122198503' (একটি স্ট্রিং) ফেরত দেয় এবং আরও এত 'ধীর' হয় যে আপনি যেভাবেই 'মিল' সেকেন্ডে পাবেন না।


0

toString(36)কিছুটা ধীর গতিতে ব্যবহার করা এখানে দ্রুত এবং অনন্য সমাধান:

new Date().getUTCMilliseconds().toString() +
"-" +
Date.now() +
"-" +
filename.replace(/\s+/g, "-").toLowerCase()

0

একটি অনন্য নম্বর পেতে:

function getUnique(){
    return new Date().getTime().toString() + window.crypto.getRandomValues(new Uint32Array(1))[0];
}
// or 
function getUniqueNumber(){
    const now = new Date();
    return Number([
        now.getFullYear(),
        now.getMonth(),
        now.getDate(),
        now.getHours(),
        now.getMinutes(),
        now.getUTCMilliseconds(),
        window.crypto.getRandomValues(new Uint8Array(1))[0]
    ].join(""));
}

উদাহরণ:

getUnique()
"15951973277543340653840"

for (let i=0; i<5; i++){
    console.log( getUnique() );
}
15951974746301197061197
15951974746301600673248
15951974746302690320798
15951974746313778184640
1595197474631922766030

getUniqueNumber()
20206201121832230

for (let i=0; i<5; i++){
    console.log( getUniqueNumber() );
}
2020620112149367
2020620112149336
20206201121493240
20206201121493150
20206201121494200

আপনি দৈর্ঘ্য ব্যবহার করে পরিবর্তন করতে পারেন:

new Uint8Array(1)[0]
// or
new Uint16Array(1)[0]
// or
new Uint32Array(1)[0]

প্রশ্নটি এলোমেলো স্ট্রিং নয়, একটি অনন্য নম্বর চেয়েছিল ।
tshimkus

0

সহজ সমাধান আমি খুঁজে পেয়েছি

var আজ = নতুন তারিখ ()। মানOf ();

কনসোল.লগ (আজ);

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