Javascript:将时间戳转换为人类可读日期?

时间:2016-11-23 10:01:16

标签: javascript

我只是尝试将时间戳转换回人类可读的日期,但转换时得到的却是奇怪而错误的。

这就是我保存时间戳的方法:

var timestamp = Number(new Date());
localStorag.setItem("mytimestamp", timestamp);

这就是我将其恢复并将其转换为可读日期的方式:

var mydate = localStorag.getItem("mytimestamp");
var jsDate = new Date(mydate*1000);

alert(jsDate);

jsDate错了,我不明白导致它的原因!

有人可以就此提出建议吗?

7 个答案:

答案 0 :(得分:10)

您可以使用Number数据类型代替date * 1000来实现此目的。请参阅下面的代码示例:

// generate a timestamp
var timestamp = Number(new Date()) //1479895361931

然后

// get the date representation from the timestamp
var date = new Date(timestamp) // Wed Nov 23 2016 18:03:25 GMT+0800 (WITA)

答案 1 :(得分:6)

以下是使用toDateString()方法的简单解决方案:

const date = new Date(timestamp).toDateString();
console.log(date);

这将返回类似于: 2016年7月14日星期四

答案 2 :(得分:4)

此处出现问题的原因是您将时间戳乘以1000。

如果您只是将myDate传递给Date构造函数,那么您应该获得正确的时间 -

var timestamp = Number(new Date());
localStorage.setItem("mytimestamp", timestamp);
// ...
var mydateStr = localStorage.getItem("mytimestamp");
var myDate = Number(mydateStr); // convert the string back to a number
var jsDate = new Date(mydate);

Javascript确实处理了毫秒,但由于您使用Javascript生成时间戳,然后使用Javascript将其读回,因此无需转换 - 您可以按原样使用该值。

正如@manish在评论中指出的那样,存储在localStorage中的值将是一个字符串 - 记得在将它传递给Date构造函数之前将其转换回数字。

答案 3 :(得分:2)

尝试使用moment.js。它添加了诸如

之类的功能
moment().format('MMMM Do YYYY, h:mm:ss a'); // November 23rd 2016, 12:03:36 pm
moment().format('dddd');                    // Wednesday
moment().format("MMM Do YY");               // Nov 23rd 16
moment().format('YYYY [escaped] YYYY');     // 2016 escaped 2016
moment().format();                          // 2016-11-23T12:03:36+02:00

答案 4 :(得分:1)

var yourTimestamp = localStorag.getItem("mytimestamp");
jsDate = new Date(yourTimestamp);

jsDateValues = [
   jsDate.getFullYear(),
   jsDate.getMonth()+1,
   jsDate.getDate(),
   jsDate.getHours(),
   jsDate.getMinutes(),
   jsDate.getSeconds(),
];
alert(jsDateValues); //=> [2011, 3, 25, 23, 0, 0]

你可以使用baove值并以你想要的格式打印,例如dd / mm / yyyy

答案 5 :(得分:1)

这里的问题是,当你在localstorage中存储一些东西时,它被存储为字符串'1479895747557'而不是数字所以当你从localstorage返回时间戳时,它不是一个数字,而是一个字符串。虽然当你乘以它时实际上由于内部转换而改变的值变为1479895747557000,这代表了与你保存的日期不同的日期。所以解决方案是将字符串转换回数字。这是可以正常工作的代码。



var timestamp = Number(new Date());
localStorage.setItem("mytimestamp", timestamp);
var mydate = localStorage.getItem("mytimestamp");
var jsDate = new Date(Number(mydate));
alert(jsDate);




以下是不执行转换回数字的代码,这将为您提供无效日期。



var timestamp = Number(new Date());
localStorage.setItem("mytimestamp", timestamp);

var mydate = localStorage.getItem("mytimestamp");

var jsDate = new Date(mydate);

alert(jsDate);




<强> FIDDLE

答案 6 :(得分:0)

通过在nodejs项目中安装moment模块:

npm i --save moment

file.js 文件中,您可以编写:

const moment = require('moment');

let timestamp = Number(new Date());
let myMoment = moment(timestamp).format("MMMM Do YYYY_HH-mm-ss.SSSS"); // February 28th 2020_01-06-34.0000

Here moment的文档。