जावास्क्रिप्ट समय के साथ एक अद्वितीय संख्या बनाएं


95

मुझे जावास्क्रिप्ट का उपयोग करके मक्खी पर अद्वितीय आईडी नंबर उत्पन्न करने की आवश्यकता है। अतीत में, मैंने समय का उपयोग करके एक संख्या बनाकर ऐसा किया है। यह संख्या चार अंकों के वर्ष, दो अंकों के महीने, दो अंकों के दिन, दो अंकों के घंटे, दो अंकों के मिनट, दो अंकों की दूसरी और तीन अंकों की मिलीसेकंड से बनी होगी। तो यह कुछ इस तरह दिखाई देगा: 20111104103912732 ... यह मेरे उद्देश्यों के लिए एक अद्वितीय संख्या की पर्याप्त निश्चितता देगा।

जब से मैंने यह किया है तब से यह एक समय है और मेरे पास अब कोड नहीं है। किसी के पास ऐसा करने के लिए कोड है, या एक अद्वितीय आईडी बनाने के लिए बेहतर सुझाव है?



क्या आपने विचार किया new Date().toISOString ()?
गैसपार्क

जवाबों:


66

अगर आप सिर्फ यूनिक-ईश नंबर चाहते हैं, तो

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()

3
@ Ixel: मैंने यह नहीं कहा कि यह अद्वितीय है, मैंने कहा कि यह "अद्वितीय-ईश" है। निश्चित रूप से टाइमस्टैम्प जनरेट किए गए क्लाइंट-साइड का उपयोग करके डूप उत्पन्न किया जा रहा है।
मार्क बी

78
टाइमस्टैम्प होना चाहिए रिटर्न 0 और 999 के बीच की संख्या 1st जनवरी 1970 (सामान्य टाइमस्टैम्प) के बाद से रिटर्न मिलीसेकेंड। w3schools.com/jsref/jsref_obj_date.aspnew Date().getTime();date.getUTCMilliseconds()date.getTime()
Automatico

8
-1, चूंकि प्रश्न अद्वितीय संख्या के बारे में था । कोड का पहला ब्लॉक पूरी तरह से छोड़ा जाना चाहिए।
एंड्री

यह 2 अद्वितीय मूल्य उत्पन्न कर सकता है:function foo1() {console.log(new Date().getUTCMilliseconds()); console.log(new Date().getUTCMilliseconds()); }
शारिकोव व्लादिस्लाव

10
getUTCMilliseconds The value returned by getUTCMilliseconds() is an integer between 0 and 999.। यह अद्वितीय आईडी के लिए सबसे खराब विचार है, पहले पैराग्राफ को हटा दिया जाना चाहिए।
गैसपार्ड

116

एक बेहतर तरीका होगा:

new Date().valueOf();

के बजाय

new Date().getUTCMilliseconds();

valueOf () "सबसे अधिक संभावना है" एक अद्वितीय संख्या है। http://www.w3schools.com/jsref/jsref_valueof_date.asp


19
यह एक अद्वितीय संख्या नहीं है .. मिलीसेकंड को दानेदार नहीं माना जाता है जिसे अद्वितीय माना जाता है।
वामसी मोहन जयंती

3
या बस+new Date()
thdoan

1
मैं सिर्फ लूप के लिए दौड़ा और मुझे डुप्लिकेट परिणाम मिले valueOf()। मैं सिर्फ इसका उपयोग करता हूं - +performance.now().toString().replace('.', 7) developer.mozilla.org/en-US/docs/Web/API/Performance/now
Itzik Ben Hutta

1
@ItzikBenHutta एक ही मूल्य के 3 गुना हो गया। बहु-कोर सीपीयू का उपयोग करते हुए, संभवतः थ्रेड्स के साथ एक दौड़ की स्थिति।
वह-बेन

68

एक संख्या बनाने के लिए सबसे छोटा तरीका जिसे आप सुनिश्चित कर सकते हैं कि आप जितने अलग-अलग उदाहरणों के बारे में सोच सकते हैं, उतने ही विशिष्ट होंगे

Date.now() + Math.random()

यदि फ़ंक्शन कॉल में 1 मिलीसेकंड अंतर है, तो एक अलग संख्या उत्पन्न करने के लिए 100% गारंटी है । एक ही मिलीसेकंड के भीतर फ़ंक्शन कॉल के लिए आपको केवल चिंतित होना चाहिए यदि आप इस एक ही मिलीसेकंड के भीतर कुछ मिलियन से अधिक संख्या बना रहे हैं, जो बहुत संभावित नहीं है।

एक ही मिलीसेकेंड के भीतर बार-बार नंबर प्राप्त करने की संभावना पर अधिक जानकारी के लिए https://stackoverflow.com/a/28220928/4617597 देखें


7
इसके अलावा, यदि आप यादृच्छिक संख्या के सभी बिट्स रखना चाहते हैं, तो आप उन्हें अलग से उत्पन्न कर सकते हैं और तार के रूप में मर्ज कर सकते हैं: नई तिथि ()। valueOf ()। ToString (36) + Math.random ()। ToString (36) .substr। (२) इससे आपको १ ९ वर्ण का अल्फ़ान्यूमेरिक स्ट्रिंग मिलेगा जो एक अच्छी मात्रा में एन्ट्रॉपी है। इसमें से आधे का पूर्वानुमान है।
एरिक पुक्किंसिस

2
यह स्वीकार किए जाने वाले उत्तर के रूप में होना चाहिए जब अन्य उच्च मतदान उत्तरों की कोशिश कर रहा हो, मुझे एक async फ़ंक्शन से कॉल करते समय एक पंक्ति में 2 और यहां तक ​​कि 3 गुना समान मूल्य मिला। यह एक मानक 8-कोर सीपीयू के लिए पर्याप्त यादृच्छिकता प्रदान करने के लिए लगता है एक ही पल में 8 अद्वितीय तार उत्पन्न करने के लिए, मेरे उपयोग के लिए पर्याप्त है।
वह-बेन

22

यह केवल निम्नलिखित कोड के साथ प्राप्त किया जा सकता है:

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
क्या होगा अगर इसे एक ही मिलीसेकंड में दो बार बुलाया जाए?
TBE

1
वास्तव में, लेकिन यह ऑप के लिए ठीक था: "यह मेरे उद्देश्यों के लिए एक अद्वितीय संख्या की पर्याप्त निश्चितता देगा।"
अगस्त लिलियास

17

जब मैं संख्याओं के एक समूह की तुलना में कुछ छोटा करना चाहता हूं तो मैं यहां हूं - आधार बदलें।

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

1
यह सच है, यह दुर्लभ झड़पों का कारण बन सकता है। आप कोड 5 का उपयोग करके टाइमस्टैम्प को md5 कर सकते हैं। जैसे कि code.google.com/p/crypto-js , लेकिन मेरे उद्देश्यों के लिए यह "अद्वितीय पर्याप्त" था, और इससे भी महत्वपूर्ण बात, तेज।
फ्रॉमबर्ट

@ फ्राम्बर्ट, यह निर्भर करता है। MD5 टकराव प्रतिरोधी भी नहीं है। लेकिन आपके मामले में मैं बहुत तेजी से मुसीबत में पड़ गया क्योंकि (36) जो मुझे लगता है कि यह एससीआई प्रतिनिधित्व करने के लिए संख्यात्मक मान धर्मान्तरित है, हालांकि यह सुनिश्चित नहीं है, लेकिन मैं समस्या देख सकता हूं, यदि आप अपने यूआईडी जनरेटर को अक्सर पर्याप्त कहते हैं, केवल अंतिम 3 chars बदल रहे हैं इसलिए संभावना अधिक है कि आप टकराव में पड़ जाएंगे। यदि आप नए Date.getTime () कॉल से चिपके रहते हैं, तो आपको बहुत बेहतर हालात मिलते हैं। लेकिन हे अगर यह आपके उद्देश्यों के लिए काम करता है, तो कोई समस्या नहीं है, मुझे इसकी आवश्यकता केवल मेरे क्लाइंट साइड कोड के लिए कुछ विशिष्ट आईडी के लिए है, यूआईडी नोड लिब का उपयोग करके समाप्त हुई।
ब्लशर्ट

मुझे यह पसंद है! (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;

jsfiddle: http://jsfiddle.net/j8aLocan/

मैंने इसे Bower और npm पर जारी किया है: https://github.com/stevenvachon/unique-number

आप गैर-संख्या उत्पन्न करने के लिए कुछ अधिक विस्तृत जैसे कि क्यूड , पुइद या शॉर्टिड का भी उपयोग कर सकते हैं ।


1
यह मुझे लगता है कि यादृच्छिक संख्याओं को जोड़ना वास्तव में इसे कम पूर्ण प्रमाण बना देगा। सिर्फ समय की मुहर के साथ, दो संख्याओं को एक ही सटीक मिलिसेकंड के समान बनाया जाना होगा। दो यादृच्छिक संख्याओं को जोड़कर, आपने अब गणित के कारण संख्याओं के कई संयोजन बनाए हैं, जो गुणा होने पर उसी परिणाम के साथ समाप्त हो सकते हैं। मुझे पता है कि यह संभावना नहीं है, लेकिन ... यह सही नहीं है?
फिल

हम्म, हाँ। शायद मेरा उत्तर और अबरबर के उत्तर का एक संयोजन सबसे अच्छा होगा।
स्टीवन वचोन

मेरे उत्तर को अपडेट किया। विचार के लिए धन्यवाद।
स्टीवन वचोन

2
अच्छा प्रयास, आपके उत्तर को चुनने की कोशिश नहीं ... लेकिन यह नया समाधान वास्तव में "एक ही मिलीसेकंड पर बनाई गई एक से अधिक आईडी" को हल नहीं करता है, क्योंकि, आपको पता है कि यह जावास्क्रिप्ट है, CLIENT तरफ। यदि एक अलग उपयोगकर्ता ने एक ही सटीक मिलीसेकंड पर एक नंबर बनाया है, तो वह 'अन्य' उपयोगकर्ता के अनूठे प्रकार से दिखाई नहीं देगा। जब तक आप इसे सर्वर पर कहीं स्टोर नहीं करते हैं और विशिष्टता के लिए जांच करते हैं ... कोई तरीका नहीं है कि शुद्ध रूप से js- आधारित समाधान इस तरह से हो सकता है कि यह एक विशिष्ट संख्या बना रहा है।
फिल

ठीक है, यह सिर्फ एक अद्वितीय संख्या की तुलना में अधिक विस्तृत प्रणाली होगी।
स्टीवन वचोन

12

मैं उपयोग करता हूं

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

इसलिए अगर किसी भी तरह से कोड को एक ही समय में निकाल दिया जाता है, तो यह भी एक मौका है कि यादृच्छिक संख्या समान होगी।


सुनिश्चित नहीं है कि new Date()उपयोगी कठिन है। आप दो अलग-अलग तिथियों के साथ समान संख्या प्राप्त कर सकते हैं
JMaylin

1
मेरा मतलब है, यह केवल करने से बेहतर कैसे है Math.random()?
12 मई को JMaylin

7

यह करना चाहिए:

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

1
कई मामलों के लिए उपयोगी, आखिरकार यह वास्तव में शुद्ध "अद्वितीय" आईडी उत्पन्न नहीं करता है, यदि इस फ़ंक्शन को एक ही मिलीसेकंड में कई बार कहा जाता है ... लेकिन फिर भी, उपयोगकर्ता और यूआई इंटरैक्शन के लिए, यह अच्छा है।
बेंजामिन पीटर

1
यह स्वीकृत उत्तर होना चाहिए। अप्रासंगिक बकवास के बहुत सारे जो कठिन और अनावश्यक हैं, और यह उत्तर प्रत्येक मिलीसेकंड प्रति अद्वितीय समय देता है।
जीन b।

5

यदि आप कुछ मिली सेकंड के बाद एक अद्वितीय संख्या चाहते हैं 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 + '.');
            }
        }            
    }

यह शायद कुछ लोगों के लिए मददगार हो।

चियर्स

एंड्रयू


यह इस प्रश्न के बारे में सबसे सरल और त्रुटि प्रमाण समाधान है। मैंने एक अलग समाधान की कोशिश की है (नीचे देखें), लेकिन मुझे अभी भी इसके बारे में कुछ चिंताएं हैं जिन्हें और अधिक विकास की आवश्यकता है।
लोरेटोपरसी

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"

2

2020 में, आप क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिक मान उत्पन्न करने के लिए इन-ब्राउज़र क्रिप्टो एपीआई का उपयोग कर सकते हैं ।

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

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

दोनों Uint8Array और Crypto.getRandomValues IE11 सहित सभी प्रमुख ब्राउज़रों पर समर्थित हैं


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')) // कॉम्प्लेक्स होगा

नमूना आउटपुट:
के लिए (वर मैं = 0; मैं <10; i ++) {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;
}

0

माना कि समाधान @abarber द्वारा प्रस्तावित यह एक अच्छा समाधान है क्योंकि इसका उपयोग करता है (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ब्राउज़र में I / O के लिए सबसे नज़दीकी फ़ंक्शंस का उपयोग करते हुए एक फ़ंक्शन स्थापित करेगा 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

आसान और हमेशा अद्वितीय मूल्य प्राप्त करें:

const uniqueValue = (new Date()).getTime() + Math.trunc(365 * Math.random());
**OUTPUT LIKE THIS** : 1556782842762

0

मैंने इस तरह से किया है

function uniqeId() {
   var ranDom = Math.floor(new Date().valueOf() * Math.random())
   return _.uniqueId(ranDom);
}

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

ऊपर #Marcelo Lazaroni समाधान के संदर्भ में

Date.now() + Math.random()

इस तरह के 1567507511939.4558 (4 दशमलव तक सीमित) के रूप में एक नंबर देता है, और प्रत्येक 0.1% में गैर-अद्वितीय संख्या (या टकराव) देगा।

जोड़ने toString () इसे ठीक करता है

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

रिटर्न '15675096840820.04510962122198503' (एक स्ट्रिंग), और आगे इतना 'धीमा' है कि आपको कभी भी 'वही' मिलीसेकंड नहीं मिलता है।


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

नमूना परिणाम "k3jobnvt_15750033412250_18299601769317408"


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

-1

100% एक अलग संख्या उत्पन्न करने की गारंटी ...

var Q;
Q = {};
Q.timeInterval;

function genUniqueID(kol) {
	Q.timeInterval = setTimeout(function() {
		document.querySelector('#demo').innerHTML += new Date().valueOf() + '<br>';
		kol--;
		if (kol > 0) {
			genUniqueID(kol);
		}
	}, document.querySelector('#i2').value);
}
<div><input id="i1" type="number" value="5" style="width: 60px;"><label> - Amount</label><br>
    <input id="i2" type="number" value="10" style="width: 60px;"><label> - Millisecond interval</label></div><br>
<div>
    <button onclick="genUniqueID(document.querySelector('#i1').value);">Start</button>
    <button onclick="clearTimeout(Q.timeInterval);">Stop</button>
    <button onclick="document.querySelector('#demo').innerHTML = ''">Clear</button>
</div><br>
<div id="demo"></div>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.