我想要一个表示当前日期和时间的数字,比如Unix时间戳。
时间戳(毫秒)
要获取自Unix纪元以来的毫秒数,请调用Date.now:
Date.now()
或者,使用一元运算符+调用Date.prototype.valueOf:
+ new Date()
或者,直接调用valueOf:
new Date().valueOf()
要支持IE8和更早版本(请参阅兼容性表),请为Date.now创建一个垫片:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
或者,直接调用getTime:
new Date().getTime()
时间戳(秒)
要获取自Unix纪元以来的秒数,即Unix时间戳:
Math.floor(Date.now() / 1000)
或者,使用逐位或逐层稍快,但可读性也较低,将来可能会中断(参见解释1、2):
Date.now() / 1000 | 0
以毫秒为单位的时间戳(分辨率更高)
使用performance.now:
var isPerformanceSupported=(窗口.性能&&窗口.性能.当前&&窗口.性能.计时&&窗口.性能.计时.导航开始);var timeStampInMs=(是否支持性能?window.performance.now()+窗口.性能.计时.导航开始:日期.now());console.log(timeStampInMs,Date.now());
JavaScript的工作时间是从纪元开始的毫秒数,而大多数其他语言的工作时间都是秒。您可以使用毫秒来工作,但只要您传递一个值来表示PHP,PHP本机函数可能就会失败。所以,为了确保我总是使用秒,而不是毫秒。
这将为您提供Unix时间戳(以秒为单位):
var unix = Math.round(+new Date()/1000);
这将为您提供自纪元以来的毫秒数(而不是Unix时间戳):
var milliseconds = new Date().getTime();
Date.getTime()方法可以稍微调整一下:
getTime方法返回的值是毫秒数自1970年1月1日00:00:00 UTC开始。
将结果除以1000得到Unix时间戳,必要时为floor:
(new Date).getTime() / 1000
Date.valueOf()方法在功能上等同于Date.getTime(),这使得可以对Date对象使用算术运算符来获得相同的结果。在我看来,这种方法会影响可读性。
我在这个答案中提供了多种解决方案和描述。如果有任何不清楚的地方,请随时提问
快速和肮脏的解决方案:
Date.now() /1000 |0
警告:如果您使用|0魔法,它可能会在2038年中断并返回负数。此时改用Math.floor()
Math.floor()解决方案:
Math.floor(Date.now() /1000);
德里克的书呆子替代品朕會功夫 摘自以下评论:
new Date/1e3|0
Polyfill以获取Date.now()工作:
要使其在IE中工作,您可以执行以下操作(MDN的Polyfill):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
如果您不关心年份/星期几/夏时制,您需要记住2038年之后的日期:
按位操作将导致使用32位整数而不是64位浮点。
您需要将其正确使用为:
Math.floor(Date.now() / 1000)
如果您只想知道从代码第一次运行时起的相对时间,可以使用以下内容:
const relativeTime = (() => {
const start = Date.now();
return () => Date.now() - start;
})();
在使用jQuery的情况下,可以使用$.now(),如jQuery的Docs中所述,这会使polyfill过时,因为$.now()在内部执行相同的操作:(newDate).getTime()
如果您对jQuery的版本感到满意,请考虑放弃这个答案,因为我自己没有找到它。
现在对|0的作用做一个小小的解释:
通过提供|,您可以告诉解释器执行二进制OR运算。位操作需要将Date.now()/1000的十进制结果转换为整数的绝对数。
在转换过程中,小数被删除,结果与使用Math.floor()输出的结果类似。
不过,请注意:它会将64位的双精度转换为32位的整数。这将导致处理大量数据时信息丢失。2038年后,由于32位整数溢出,时间戳将中断,除非Javascript在严格模式下移动到64位整数。
有关Date.now的更多信息,请点击以下链接:Date.now()@MDN
简单来说,这里有一个函数可以在Javascript中返回时间戳字符串。示例:下午15:06:38
function displayTime() {
var str = "";
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()
var seconds = currentTime.getSeconds()
if (minutes < 10) {
minutes = "0" + minutes
}
if (seconds < 10) {
seconds = "0" + seconds
}
str += hours + ":" + minutes + ":" + seconds + " ";
if(hours > 11){
str += "PM"
} else {
str += "AM"
}
return str;
}
jQuery提供了自己的方法来获取时间戳:
var timestamp = $.now();
(此外,它还实现了(newDate).getTime()表达式)
裁判:http://api.jquery.com/jQuery.now/
下面是一个生成时间戳的简单函数,格式为:mm/dd/yy hh:mi:ss
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
这一个有一个解决方案:在js中将unixtime stamp转换为tim
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
我还没见过
Math.floor(Date.now() / 1000); // current time in seconds
另一个我还没看到的是
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
有时我需要在xmlhttp调用的对象中使用它,所以我喜欢这样做。
timestamp : parseInt(new Date().getTime()/1000, 10)
下面是另一个在JavaScript中生成时间戳的解决方案-包括单个数字的填充方法-在结果中使用天、月、年、小时、分钟和秒(jsfiddle的工作示例):
var pad = function(int) { return int < 10 ? 0 + int : int; };
var timestamp = new Date();
timestamp.day = [
pad(timestamp.getDate()),
pad(timestamp.getMonth() + 1), // getMonth() returns 0 to 11.
timestamp.getFullYear()
];
timestamp.time = [
pad(timestamp.getHours()),
pad(timestamp.getMinutes()),
pad(timestamp.getSeconds())
];
timestamp.now = parseInt(timestamp.day.join("") + timestamp.time.join(""));
alert(timestamp.now);
Moment.js可以消除处理Javascript Dates时的许多痛苦。
参见:http://momentjs.com/docs/#/displaying/unix-时间戳/
moment().unix();
前几天,我从JQueryCookie的源代码中学习了一种将给定的Date对象转换为Unix时间戳的非常酷的方法。
下面是一个示例:
var date = new Date();
var timestamp = +date;
建议的正确方法是Number(new Date()),就代码可读性而言,
此外,UglifyJS和Google闭包编译器将降低已解析代码逻辑树的复杂性(如果您使用其中一个来隐藏/缩小代码)。
对于时间分辨率较低的Unix时间戳,只需将当前数字除以1000,保持整数。
如果想要一种在Node.js中生成时间戳的基本方法,这很好。
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
我们的团队正在使用此方法在本地主机环境中破坏缓存。输出是/dist/css/global.css?v=245521377,其中245521377是hrtime()生成的时间戳。
希望这会有所帮助,上面的方法也可以工作,但我发现这是Node.js中最简单的方法。
对于微秒分辨率的时间戳,有性能。现在:
function time() {
return performance.now() + performance.timing.navigationStart;
}
例如,这可能产生1436140826653.139,而Date.now仅产生143614086653。
我强烈建议使用moment.js
moment().valueOf()
要获取自UNIX纪元以来的秒数,请执行
moment().unix()
也可以这样转换时间:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
我一直这么做。没有双关语。
要在浏览器中使用moment.js:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
有关更多详细信息,包括安装和使用MomentJS的其他方式,请参阅他们的文档
//当前Unix时间戳//自1970年1月1日起,1443534720秒。(UTC)//秒console.log(数学地板(newDate().valueOf()/1000));//1443534720console.log(数学地板(Date.now()/1000));//1443534720console.log(数学地板(newDate().getTime()/1000));//1443534720//毫秒console.log(数学地板(newDate().valueOf()));//1443534720087console.log(数学地板(Date.now()));//1443534720087console.log(数学地板(newDate().getTime()));//1443534720087//jQuery//秒console.log(数学地板($.now()/1000));//1443534720//毫秒console.log($.now());//1443534720087<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script>
这似乎奏效了。
console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes')));
//returns 10/8/2015 21:08:18
var clock = {
now:Date.now(),
add:function (qty, units) {
switch(units.toLowerCase()) {
case 'weeks' : val = qty * 1000 * 60 * 60 * 24 * 7; break;
case 'days' : val = qty * 1000 * 60 * 60 * 24; break;
case 'hours' : val = qty * 1000 * 60 * 60; break;
case 'minutes' : val = qty * 1000 * 60; break;
case 'seconds' : val = qty * 1000; break;
default : val = undefined; break;
}
return val;
},
format:function (timestamp){
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
// Will display time in xx/xx/xxxx 00:00:00 format
return formattedTime = month + '/' +
day + '/' +
year + ' ' +
hours + ':' +
minutes.substr(-2) +
':' + seconds.substr(-2);
}
};
代码Math.floor(newDate().getTime()/1000)可以缩短为newDate/1E3|0。
考虑跳过直接getTime()调用,并使用|0替换Math.floor()函数。最好记住1E3是1000的缩写(大写E比小写表示1E3为常量)。
因此,您将获得以下结果:
var ts=新日期/1E3 |0;console.log(ts);
您只能使用
var timestamp=new Date().getTime();console.log(时间戳);
以获取当前时间戳。不需要做任何额外的事情。
日期,JavaScript中的原生对象是我们获取所有时间数据的方式。
在JavaScript中要小心,时间戳取决于客户端计算机设置,因此它不是100%准确的时间戳。要获得最佳结果,需要从服务器端获取时间戳。
总之,我更喜欢用香草。这是在JavaScript中实现的常见方法:
Date.now(); //return 1495255666921
在MDN中,如下所述:
Date.now()方法返回自1970年1月1日00:00:00 UTC。因为now()是Date的静态方法,所以您总是将其用作Date.now()。
如果您使用的版本低于ES5,Date.now();不起作用,您需要使用:
new Date().getTime();
在写这篇文章时,最重要的答案是9年前的事了,从那以后发生了很多变化——最重要的是,我们几乎得到了对非黑客解决方案的普遍支持:
Date.now()
如果你想绝对肯定这不会在某些古老的(ie9之前的)浏览器中出现,你可以将其置于检查之后,如下所示:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
当然,这将返回自纪元时间以来的毫秒,而不是秒。
Date.now上的MDN文档
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
表演
今天-2020.04.23我对选定的解决方案进行测试。我在Chrome 81.0、Safari 13.1和Firefox 75.0上测试了MacOs High Sierra 10.13.6
结论
Solution Date.now()(E)在Chrome和Safari上最快,在Firefox上第二快,这可能是快速跨浏览器解决方案的最佳选择解决方案性能.now()(G),令人惊讶的是,它比Firefox上的其他解决方案快100多倍,但在Chrome上最慢解决方案C、D、F在所有浏览器上都很慢
细节
铬的结果
您可以在此处对机器进行测试
测试中使用的代码显示在下面的代码段中
函数A(){return new Date().getTime();}函数B(){return new Date().valueOf();}函数C(){return+new Date();}函数D(){返回新日期()*1;}函数E(){return Date.now();}函数F(){return Number(new Date());}函数G(){//此解决方案返回从加载页面开始计算的时间。//(在Chrome上,它提供了更好的精度)return performance.now();}//测试log=(n,f)=>console.log(`${n}:${f()}`);日志('A',A);日志('B',B);日志('C',C);日志('D',D);对数('E',E);日志('F',F);日志('G',G);此代码段仅显示外部基准测试中使用的代码
在JavaScript中获取时间戳
在JavaScript中,时间戳是自1970年1月1日以来经过的毫秒数。如果您不打算支持<IE8,可以使用
new Date().getTime(); + new Date(); and Date.now();
直接获取时间戳,而无需创建新的Date对象。
返回所需的时间戳
new Date("11/01/2018").getTime()
要分别获得时间、月、日、年,这将起作用
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
有很多方法可以做到这一点。
Date.now()
new Date().getTime()
new Date().valueOf()
要获取以秒为单位的时间戳,请使用以下方法进行转换:
Math.floor(Date.now() / 1000)
/**
* Equivalent to PHP's time(), which returns
* current Unix timestamp.
*
* @param {string} unit - Unit of time to return.
* - Use 's' for seconds and 'ms' for milliseconds.
* @return {number}
*/
time(unit = 's') {
return unit == 's' ? Math.floor(Date.now() / 1000) : Date.now()
}
我必须创建一个TIMESTAMP,尽管我的DB映射上的类型是String,为此我使用了
new Date().toISOString();
输出类似于“2023-01-09T14:11:31.931Z”
推荐文章
- 使用JavaScript显示/隐藏'div'
- 使用JavaScript获取所选的选项文本
- AngularJS模板中的三元运算符
- 让d3.js可视化布局反应灵敏的最好方法是什么?
- 原型的目的是什么?
- 检查jquery是否使用Javascript加载
- 将camelCaseText转换为标题大小写文本
- 如何在JavaScript客户端截屏网站/谷歌怎么做的?(无需存取硬盘)
- 如何在JavaScript中遍历表行和单元格?
- jQuery map vs. each
- 自定义异常类型
- 窗口。Onload vs <body Onload =""/>
- 不能与文件列表一起使用forEach
- Angular 2 Hover事件
- 无法访问React实例(此)内部事件处理程序