如何生成时间戳unix纪元格式nodejs?

Posted

技术标签:

【中文标题】如何生成时间戳unix纪元格式nodejs?【英文标题】:How to generate timestamp unix epoch format nodejs? 【发布时间】:2014-10-04 17:03:38 【问题描述】:

我正在尝试使用 2003 端口将数据发送到石墨碳缓存进程

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 发送时间戳 unix 纪元格式?

Grpahite 理解这种格式的度量标准 metric_path value timestamp\n

【问题讨论】:

+new Date() == unix 日期 @dandavis 实际上这只是日期。您需要调用getTime() 来获取毫秒数。 @tadman:不,“+”将日期强制转换为其 valueOf() 值,这是一个表示自 1970 年开始以来的毫秒数的数字。简而言之,你永远不需要 getTime() 这是一个有趣的优化。该值仍然是毫秒,因此您需要除以 1000 才能获得秒数。 【参考方案1】:

使用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

【讨论】:

【参考方案2】:

发布您可以使用的 ECMAScript5:

Math.floor(Date.now() / 1000);

以秒为单位生成纪元时间戳。

【讨论】:

【参考方案3】:

原生 javascript Date 系统以毫秒而不是秒为单位工作,但除此之外,它与 UNIX 中的“纪元时间”相同。

您可以通过以下方式舍入小数部分并获得 UNIX 纪元:

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

更新: 正如 Guillermo 指出的,另一种语法可能更具可读性:

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

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

【讨论】:

同 ~~ (new Date/1000) 或 Math.floor(new Date/1000) @dandavis 已相应编辑。感谢那里的说明。我在这里使用了floor 来确保它是一个整数值,因为传统的time_t 时间没有小数。 一个瞬间意识到日期只是人类添加到数字上的一些方法...... Typescript 会抱怨这个,因为日期是另一种类型,而不是数字也到 Date.parse(new Date()) / 1000 等,请考虑: Math.floor(new Date().getTime( ) / 1000) 或 Math.floor(+new Date() / 1000) 我投票赞成这个答案,因为它很有用,但我不得不说我更喜欢 new Date().getTime() 而不是 +newDate()【参考方案4】:

在打字稿中,只需运行Math.floor(new Date().getTime() / 1000)

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

我目前正在运行 Node 13.7.0

【讨论】:

【参考方案5】:

AWS sdk 包含用于转换亚马逊日期格式的实用程序函数。

例如,在从 S3 获取对象的回调中,有一个亚马逊日期格式的属性“LastModified”。 (看起来他们除了为他们的日期属性导出标准的 Date 类,例如 S3 对象的“LastModified”属性之外什么都不做) 该格式包括一些内置的各种格式的实用程序(不幸的是,没有用于 unix epoch):

let awsTime = response.LastModified
console.log("Time Formats",
    "String"           : awsTime.toString(),
    "JSON"             : awsTime.toJSON(),
    "UTCString"        : awsTime.toUTCString(),
    "TimeString"       : awsTime.toTimeString(),
    "DateString"       : awsTime.toDateString(),
    "ISOString"        : awsTime.toISOString(),
    "LocaleTimeString" : awsTime.toLocaleTimeString(),
    "LocaleDateString" : awsTime.toLocaleDateString(),
    "LocaleString"     : awsTime.toLocaleString()
)
/*
Time Formats 
  String: 'Fri Sep 27 2019 16:54:31 GMT-0400 (EDT)',
  JSON: '2019-09-27T20:54:31.000Z',
  UTCString: 'Fri, 27 Sep 2019 20:54:31 GMT',
  TimeString: '16:54:31 GMT-0400 (EDT)',
  DateString: 'Fri Sep 27 2019',
  ISOString: '2019-09-27T20:54:31.000Z',
  LocaleTimeString: '16:54:31',
  LocaleDateString: '2019-9-27',
  LocaleString: '2019-9-27 16:54:31'

*/

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

let awsTime = response.LastModified
let unixEpoch = Math.floor(AWS.util.date.unixTimestamp(awsTime))

注意:此方法默认返回一个浮点值。因此 Math.floor()

来自 aws-sdk.js 的函数代码(最新):

/**
 * @return [Integer] the UNIX timestamp value for the current time
 */
 unixTimestamp: function unixTimestamp(date) 
     if (date === undefined)  date = util.date.getDate(); 
     return date.getTime() / 1000;
 

rfc822和iso8601也有方法

【讨论】:

【参考方案6】:

简化它的辅助方法,将以下内容复制/粘贴到您的 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()  return this.getTime()/1000|0 ;
    Date.time = function()  return new Date().toUnixTime(); 

    // Get the current unix time: 
    console.log("Current Time: " + Date.time())

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

【讨论】:

你应该avoid modifying the prototypes of objects you don't own【参考方案7】:

如果可以的话,我强烈推荐使用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();

ref

【讨论】:

Math.floor(new Date() / 1000) 相比,使用moment.js 有什么特别的优势吗? @Alex - 对我来说,我更喜欢moment.js 的简洁语法和更全面的功能。你可以做类似moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').add(3, 'days')

以上是关于如何生成时间戳unix纪元格式nodejs?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 kotlin 中将纪元时间戳转换为 unix 十六进制时间戳?

如何将 Unix 纪元时间戳与 SQL 中的 DATE 进行比较?

使用 sql 将字符串纪元代码从 unix 时间戳转换为日期

如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?

使用 PHP 将 mm/dd/yyyy 格式转换为纪元

Unix 纪元时间戳在 Python 中转换为 UTC 时区