Javascript 如何生成时间戳unix epoch格式节点?

Javascript 如何生成时间戳unix epoch格式节点?,javascript,node.js,graphite,Javascript,Node.js,Graphite,我正在尝试使用将数据发送到端口2003上的graphite carbon cache进程 Ubuntu终端: echo "test.average 4 `date +%s`" | nc -q0 127.0.0.1 2003 Node.js: var socket = net.createConnection(2003, "127.0.0.1", function() { socket.write("test.average "

我正在尝试使用将数据发送到端口2003上的graphite carbon cache进程

Ubuntu终端:

echo "test.average 4 `date +%s`" | nc -q0 127.0.0.1 2003
Node.js:

var socket = net.createConnection(2003, "127.0.0.1", function() {
    socket.write("test.average "+assigned_tot+"\n");
    socket.end();
});
当我在ubuntu上使用终端窗口命令发送数据时,它工作正常。但是,我不知道如何从nodejs发送timestamp unix epoch格式


Grpahite理解此格式的度量值metric_path value timestamp\n

本机JavaScript
Date
系统以毫秒为单位工作,而不是秒,但除此之外,它与UNIX中的“历元时间”相同

您可以通过执行以下操作,将秒的分数舍入,得到UNIX历元:

Math.floor(+new Date() / 1000)
更新:正如Guillermo指出的,另一种语法可能更具可读性:

Math.floor(new Date().getTime() / 1000)

第一个示例中的
+
是一个JavaScript怪癖,它强制计算为一个数字,这与转换为毫秒的效果相同。第二个版本明确地做到了这一点。

如果可以的话,我强烈建议使用
moment.js
。要获取自UNIX纪元以来的毫秒数,请执行以下操作

moment().valueOf()
要获取自UNIX纪元以来的秒数,请执行以下操作

moment().unix()
您也可以这样转换时间:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
我一直都这么做

要在节点上安装
moment.js

npm install moment
以及如何使用它

var moment = require('moment');
moment().valueOf();

帮助器方法简化它,将以下内容复制/粘贴到您的JS上:

Date.prototype.toUnixTime = function() { return this.getTime()/1000|0 };
Date.time = function() { return new Date().toUnixTime(); }
现在,您可以通过简单的呼叫随时随地使用它:

// Get the current unix time: 
console.log(Date.time())

// Parse a date and get it as Unix time
console.log(new Date('Mon, 25 Dec 2010 13:30:00 GMT').toUnixTime())
演示:


Date.prototype.toUnixTime=function(){返回this.getTime()/1000 | 0};
Date.time=function(){返回新日期().toUnixTime();}
//获取当前unix时间:
console.log(“当前时间:+Date.Time())
//解析日期并将其作为Unix时间获取

console.log(“自定义时间(2010年12月25日星期一13:30:00 GMT):”+新日期('2010年12月25日星期一13:30:00 GMT')).toUnixTime())
AWS sdk包含用于转换亚马逊日期格式的实用程序函数

例如,在S3 get对象的回调中,有一个属性“LastModified”是amazon日期格式。(看起来他们什么也不做,只是为自己的日期属性(如S3对象“LastModified”属性)导出标准日期类) 该格式包括一些内置的各种格式的实用程序(不幸的是,unix epoch没有):

但是,AWS utils函数包括一个“日期”模块,其他函数包括一个unixTimestamp方法:

let awsTime = response.LastModified
let unixEpoch = Math.floor(AWS.util.date.unixTimestamp(awsTime))
注意:默认情况下,此方法返回浮点值。因此,Math.floor()

aws-sdk.js中的功能代码(最新版本):


在typescript中还有rfc822和iso8601的方法,只需运行
Math.floor(new Date().getTime()/1000)


我目前正在运行Node 13.7.0,您可以使用ECMAScript 5:

Math.floor(Date.now() / 1000);
它以秒为单位生成历元时间戳。

使用momentjs:

以下两个变量具有相同的值:-

console.log(moment().format('X'))
console.log(moment.utc().format('X'))
使用内置的Date():

console.log(new Date().getTime())   // including fractional seconds
console.log(Math.floor(new Date().getTime()/1000))    // up to seconds

+新日期()==unixdate@dandavis事实上那只是日期。您需要调用
getTime()
来获取毫秒数。@tadman:不,“+”将日期强制转换为它的valueOf()值,这是一个表示从1970年开始的毫秒数的数字。简而言之,您永远不需要getTime(),这是一个有趣的优化。该值仍然是毫秒,因此需要除以1000才能得到秒数。与~~(new Date/1000)或Math.floor(new Date/1000)相同@dandavis会相应地进行编辑。谢谢你的留言。我在这里使用了
floor
来确保它是一个整数值,因为传统的
time\u t
时间没有小数。一个令人振奋的时刻是,意识到日期只是人类附加在数字上的一些方法……Typescript会抱怨这个,因为日期也是日期的另一种类型,而不是数字。parse(new date())/ 1000等,考虑:Maule.Lead(new DATE)(GETTIMEY)(1000)或Madio.Lead(+ new DATE()/ 1000),我投票赞成这个答案,因为它是有用的,但是我不得不说,我更喜欢读更容易读的新数据()。GETTIMEY()在+NeXDATE()上有什么特殊的优势,使用<代码> Time.js<代码>,比如“代码> Madio.Lead(新数据)()/1000)?@Alex-对我来说,我更喜欢
moment.js
简洁的语法和更全面的功能。你可以做一些事情,比如“瞬间”(2015-07-12 14:59:23),“YYYY-MM-DD HH:MM:ss”)。添加(3天)你应该
Math.floor(Date.now() / 1000);
console.log(moment().format('X'))
console.log(moment.utc().format('X'))
console.log(new Date().getTime())   // including fractional seconds
console.log(Math.floor(new Date().getTime()/1000))    // up to seconds