将普通日期转换为 unix 时间戳

Posted

技术标签:

【中文标题】将普通日期转换为 unix 时间戳【英文标题】:Convert normal date to unix timestamp 【发布时间】:2012-08-07 05:58:51 【问题描述】:

如何在 javascript 中将普通日期 2012.08.10 转换为 unix 时间戳

小提琴:http://jsfiddle.net/J2pWj/ 我在这里看到了很多将其转换为 php、Ruby 等的帖子……但我需要在 JS 中执行此操作。

【问题讨论】:

convert date to timestamp in javascript?的可能重复 你试过 newDate.getTime() / 1000 吗? @LokiAstari 是的,对不起。我做了搜索,但没有找到。 也许我遗漏了一些东西,但unix timestamp 对于所有工程和计算机科学来说都是如此基础。希望有内置的便捷方法。目前我正在使用Math.floor((+new Date()) / 1000); 【参考方案1】:

您可以使用 Date.parse(),但它接受的输入格式取决于实现。但是,如果您可以将日期转换为 ISO 格式 (YYYY-MM-DD),那么大多数实现应该都能理解它。

见Why does Date.parse give incorrect results?。

【讨论】:

【参考方案2】:
Math.floor(new Date('2012.08.10').getTime() / 1000)

检查JavaScript Date documentation。

【讨论】:

Math.floor 它或它不是一个 unix 时间戳(它会有一个小数) @fguillen,Mooseman,我运行并检查了这段代码。一旦我将 unix 时间戳转换为日期,它就会给我 2012.08.09 而不是 2012.08.10。这是为什么..? @user2584538,请参阅下面的答案。您必须删除小数。 为什么 Date.parse 给出不正确的结果?:***.com/a/2587398/2714931 @Mentor UNIX 时间以秒为单位,而不是毫秒【参考方案3】:
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;

【讨论】:

【参考方案4】:
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

在除以 1000 以将毫秒转换为秒时,添加 toFixed(0) 以删除所有小数非常重要。

.getTime() 函数以毫秒为单位返回时间戳,但真正的 unix 时间戳始终以秒为单位。

【讨论】:

请注意,它返回的是字符串,而不是数字。 好点,将答案更改为使用 parseInt() 换行以转换回整数。 如果性能很重要,可能更好、更正确的选项是Math.roundMath.floor,而不是先转换为字符串然后再转换为整数 - 即:Math.round(new Date('2012.08.10').getTime() / 1000)【参考方案5】:

您可以简单地使用一元 + 运算符

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - 查看日期。

【讨论】:

只想在此处添加两个 cmets:不需要一元 add + 运算符,因为 / 已经是一个数学运算符。此外,toFixed 返回一个字符串而不是数字,以防类型很重要..【参考方案6】:

您应该查看 moment.js api,它非常易于使用并且具有许多内置功能。

我认为对于你的问题,你可以使用这样的东西:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();

【讨论】:

【参考方案7】:

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch

【讨论】:

【参考方案8】:

在将时间戳与来自 PHP 的时间戳进行比较后,以上都不适用于我的时区。下面的代码给了我与 PHP 相同的结果,这对我正在做的项目来说是最重要的。

function getTimeStamp(input) 
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;


// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

我在 NodeJS 上使用它,我们有时区“澳大利亚/悉尼”。所以,我不得不在 .env 文件中添加这个:

TZ = 'Australia/Sydney'

以上等价于:

process.env.TZ = 'Australia/Sydney'

【讨论】:

【参考方案9】:

你可以使用 Date.parse() 方法。

Date.parse($("#yourCustomDate).val())

Date.parse("03.03.2016") 输出-> 1456959600000

Date.parse("2015-12-12") 输出-> 1449878400000

【讨论】:

这个答案与 6 年前的 one given by Barmar 有何不同?【参考方案10】:
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

在这种情况下,重要的是只返回一个整数(所以简单的除法不会这样做),并且只返回实际经过的秒数(这就是为什么这段代码使用Math.floor() 而不是Math.round())。

【讨论】:

【参考方案11】:

将时间戳转换为 unix 时间戳。

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

获取转换后的时间戳 const TimeStamp = new Date(date*1000).getTime(); //1513787412000

【讨论】:

以上是关于将普通日期转换为 unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

将 Unix 时间戳转换为日期字符串

如何将日期时间转换为 c 中的 unix 时间戳?

用于将日期和时间列转换为 .csv 中的 unix 时间戳的 Bash 脚本

如何将 13 位 Unix 时间戳转换为日期和时间?

Ruby:将unix时间戳转换为日期[重复]

MySQL将日期字符串转换为Unix时间戳