时刻Unix时间戳格式错误导致日期错误

4
我想要将Unix毫秒级时间戳转换为可读日期。
我的时间戳是1525772511140。 正确的输出应该是: 2018年5月29日 上午9:41:51
现在我的代码返回了错误的日期:50319年10月31日 03:10...
代码如下:
var timeStamp = new Date(1525772511140 * 1000);
var date = moment(timeStamp).format('DD-MM-YYYY HH:mm');
console.log(date);

1
你为什么要乘以1000? - user9420984
1
但是时间戳已经是毫秒级的了 @lakshay - user9420984
是的,我现在看到了。 - abhit
(*1000/1000) 是多余的...不需要这样做。 - abhit
@lakshay 是的,哈哈,很真实。 - pazta
6个回答

6
你可以简单地使用moment(Number)
类似于new Date(Number),你可以通过传递一个整数值来创建一个 moment,该值表示自 Unix 纪元(1970 年 1 月 1 日 12AM UTC)以来的毫秒数。

var date = moment(1525772511140).format('DD-MM-YYYY HH:mm');
console.log(date);
// with seconds and AM/PM
date = moment(1525772511140).format('DD-MM-YYYY hh:mm:ss A');
console.log(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>

不使用moment.js的本地JavaScript解决方案:

var d = new Date(1525772511140);
console.log(
  ("0" + d.getDate()).slice(-2) + '-' +
  ("0" + (d.getMonth()+1)).slice(-2) + '-' + 
  d.getFullYear() + ' ' +
  d.getHours() + ':' +
  d.getMinutes()
);


2

只需从您的语句中删除*1000,它就可以正常工作:

var timeStamp = new Date(1525772511140);
var date = moment(timeStamp).format('DD-MM-YYYY HH:mm');
console.log(date);
<script src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>

时间戳已经是毫秒级的,不需要乘以1000。

谢谢,但是会出现“无效日期”的错误。以某种方式,如果我这样做Date(1525772511140 / 1000 * 1000)它就能工作。 - pazta
嗯,这很奇怪,当我的输出不同时。 - pazta
你是否使用了和我一样的 moment.js 导入?@pazta - user9420984

0

尝试

const date = moment(new Date(1525772511140)).toDate();

或者

const date = moment(new Date(1525772511140)).format('DD-MM-YYYY HH:mm')

0

试试这个

moment.unix(1525772511140 / 1000).format('DD-MM-YYYY HH:mm')

0
我曾经遇到过同样的问题,即获取以毫秒为单位的Unix时间戳。对我有用的方法是将Unix时间戳除以1000,并与moment.unix()一起使用,因为moment.unix接受以秒为单位的时间戳值:
let formattedDate = moment.unix(1646394914141 / 1000).format("yyyy-MM-DD hh:mm:ss");
console.log(formattedDate); // 2022-03-04 03:13:56

0

所有答案都没有给出正确的输出。

在问题中,期望的输出是29-05-2018 9:41:51AM,即moment().format('DD-MM-YYYY HH:mm:ss A')

以下是根据问题的正确答案:

let date = moment(1525772511140).format('DD-MM-YYYY HH:mm:ss A');
console.log(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>

有关时间格式的更多信息,请查看此链接:https://momentjs.com/docs/#/parsing/special-formats/


你检查我的答案了吗? - Vikasdeep Singh
“...ssA” 应该放在格式的末尾以匹配,而不是“...ss A”...这会在秒和AM/PM之间加入一个空格...而示例中没有。 - steviesama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接