Create a unique number with javascript time

后端 未结 30 2981
生来不讨喜
生来不讨喜 2020-12-02 08:31

I need to generate unique id numbers on the fly using javascript. In the past, I\'ve done this by creating a number using time. The number would be made up of the four digi

相关标签:
30条回答
  • 2020-12-02 08:48
    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 讨论(0)
  • 2020-12-02 08:48

    in reference to #Marcelo Lazaroni solution above

    Date.now() + Math.random()
    

    returns a number such as this 1567507511939.4558 (limited to 4 decimals), and will give non-unique numbers (or collisions) every 0.1%.

    adding toString() fixes this

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

    returns '15675096840820.04510962122198503' (a string), and is further so 'slow' that you never get the 'same' millisecond, anyway.

    0 讨论(0)
  • 2020-12-02 08:49

    Using toString(36), slightly slow, here is the faster and unique solution:

    new Date().getUTCMilliseconds().toString() +
    "-" +
    Date.now() +
    "-" +
    filename.replace(/\s+/g, "-").toLowerCase()
    
    0 讨论(0)
  • 2020-12-02 08:51
    let uuid = ((new Date().getTime()).toString(36))+'_'+(Date.now() + Math.random().toString()).split('.').join("_")
    

    sample result "k3jobnvt_15750033412250_18299601769317408"

    0 讨论(0)
  • 2020-12-02 08:52

    If you just want a unique-ish number, then

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

    would get you a simple number. But if you need the readable version, you're in for a bit of processing:

    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()
    
    0 讨论(0)
  • 2020-12-02 08:53

    I use

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

    So if by any chance the code is fired at the same time there is also a teeny chance that the random numbers will be the same.

    0 讨论(0)
提交回复
热议问题