Nic*_*rie 90 javascript time numbers unique
我需要使用javascript动态生成唯一的ID号.在过去,我通过使用时间创建数字来完成此操作.该数字将由四位数年份,两位数月份,两位数日期,两位数小时,两位数分钟,两位数秒和三位数毫秒组成.所以它看起来像这样:20111104103912732 ......这将为我的目的提供足够的确定性.
我做了这个已经有一段时间了,而且我已经没有代码了.任何人都有代码来执行此操作,或者有更好的建议来生成唯一ID?
小智 102
更好的方法是:
new Date().valueOf();
Run Code Online (Sandbox Code Playgroud)
代替
new Date().getUTCMilliseconds();
Run Code Online (Sandbox Code Playgroud)
valueOf()是"最有可能"的唯一数字. http://www.w3schools.com/jsref/jsref_valueof_date.asp.
Mar*_*c B 62
如果你只想要一个唯一的数字,那么
var timestamp = new Date().getUTCMilliseconds();
Run Code Online (Sandbox Code Playgroud)
会给你一个简单的数字.但是,如果您需要可读的版本,那么您需要进行一些处理:
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()
Run Code Online (Sandbox Code Playgroud)
Mar*_*oni 51
创建一个您可以非常肯定的数字的最短方式在您可以想到的众多单独实例中是唯一的
Date.now() + Math.random()
Run Code Online (Sandbox Code Playgroud)
如果函数调用存在1毫秒的差异,则100%保证生成不同的数字.对于相同毫秒内的函数调用,如果您在同一毫秒内创建超过几百万个数字,那么您应该开始担心,这不太可能.
有关在相同毫秒内获得重复数字的概率的更多信息,请参阅/sf/answers/1975464991/
Aug*_*aas 21
这可以通过以下代码简单地实现:
var date = new Date();
var components = [
date.getYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
];
var id = components.join("");
Run Code Online (Sandbox Code Playgroud)
Ste*_*hon 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;
Run Code Online (Sandbox Code Playgroud)
jsfiddle:http://jsfiddle.net/j8aLocan/
我已经在Bower和npm上发布了这个:https://github.com/stevenvachon/unique-number
您还可以使用更精细的内容,例如cuid,puid或shortid来生成非数字.
fru*_*ert 15
这就是我想要的东西,当我想要比一堆数字更小的东西时 - 改变基础.
var uid = (new Date().getTime()).toString(36)
Run Code Online (Sandbox Code Playgroud)
Mar*_*Cen 14
到 2024 年,您可以使用浏览器内的Crypto API生成加密的强随机值。
function getRandomNumbers() {
const typedArray = new Uint8Array(10);
const randomValues = window.crypto.getRandomValues(typedArray);
return randomValues.join('');
}
console.log(getRandomNumbers());
// 1857488137147725264738
Run Code Online (Sandbox Code Playgroud)
function getRandomNumbers() {
const typedArray = new Uint8Array(10);
const randomValues = window.crypto.getRandomValues(typedArray);
return randomValues.join('');
}
console.log(getRandomNumbers());Run Code Online (Sandbox Code Playgroud)
所有主要浏览器都支持Uint8Array构造函数和Crypto.getRandomValues ,包括 IE11
小智 12
我用
Math.floor(new Date().valueOf() * Math.random())
Run Code Online (Sandbox Code Playgroud)
因此,如果代码同时被解雇,那么随机数也将是相同的.
这应该做:
var uniqueNumber = new Date().getTime(); // milliseconds since 1st Jan. 1970
Run Code Online (Sandbox Code Playgroud)
如果你想在几毫秒后得到一个唯一的数字然后使用Date.now(),如果你想在 a 内使用它for loop然后Date.now() and Math.random()一起使用
for 循环中的唯一编号
function getUniqueID(){
for(var i = 0; i< 5; i++)
console.log(Date.now() + ( (Math.random()*100000).toFixed()))
}
getUniqueID()
Run Code Online (Sandbox Code Playgroud)
输出::所有数字都是唯一的
15598251485988384
155982514859810330
155982514859860737
155982514859882244
155982514859883316
唯一编号没有 Math.random()
function getUniqueID(){
for(var i = 0; i< 5; i++)
console.log(Date.now())
}
getUniqueID()
Run Code Online (Sandbox Code Playgroud)
输出::重复数字
1559825328327
1559825328327
1559825328327
1559825328328
1559825328328
通过在线调查,我想出了以下对象,它为每个会话创建一个唯一的 ID:
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 + '.');
}
}
}
Run Code Online (Sandbox Code Playgroud)
这可能对某些人有帮助。
干杯
安德鲁
| 归档时间: |
|
| 查看次数: |
170103 次 |
| 最近记录: |