如何将Unix时间戳转换为日历日期Moment.JS

我有一个UNIX时间戳,我正在尝试将其转换为日历日期,例如MM/DD/YYYY。 到目前为止,我有这个:

$(document).ready(function() {
var value = $("#unixtime").val(); //this retrieves the unix timestamp
var dateString = moment(value).calendar();
alert(dateString);
});

当我尝试打印日历日期时,窗口显示“无效日期”。有人能帮我吗?

398154 次浏览

Unix时间戳它是从1970年开始的秒数,因此您需要将其转换为JS日期对象:

var date = new Date(unixTimestamp*1000);

按照您的要求使用moment.JS,有一个unix方法,该方法接受以秒为单位的UNIX时间戳:

var dateString = moment.unix(value).format("MM/DD/YYYY");
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()

时刻.JS提供可使用的本地化格式

这里有一个例子:

const moment = require('moment');


const timestamp = 1519482900000;
const formatted = moment(timestamp).format('L');


console.log(formatted); // "02/24/2018"

我像这个例子一样修复了它。

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />

可能有点晚,但对于像这样的新问题,我使用以下代码:

moment(timestamp, 'X').format('lll');

您可以更改格式以满足您的需求,也可以像这样添加时区:

moment(timestamp, 'X').tz(timezone).format('lll');

参考:https://momentjs.com/docs/#/parsing/string/

警告:对分析字符串的浏览器支持不一致。因为 没有关于应该支持哪些格式的规范, 在某些浏览器中有效,在其他浏览器中无效。

以获得一致的结果解析除ISO8601字符串之外的任何内容, 您应该使用字符串+格式.

例子

moment('2022-12-03').format('YYYY-MM-DD'); //avoid use this because inconsistentcy
moment('2022-12-03','YYYY-MM-DD').format('YYYY-MM-DD'); //use this instead
moment('1670000400','X').format('YYYY-MM-DD'); //use this instead (timestamp)
moment('03-2022-12','DD-YYYY-MM').format('YYYY-MM-DD'); //UNCOMMON CASE
$(document).ready(function() {
var value = $("#unixtime").val(); //this retrieves the unix timestamp
var dateString = moment(value, 'MM/DD/YYYY', false).calendar();
alert(dateString);
});

存在严格模式宽恕模式

虽然严格模式在大多数情况下效果更好,但当传递给Moment的字符串的格式可能不同时,宽容模式可能非常有用。

在以后的版本中,解析器将默认使用严格模式。 严格模式要求时刻的输入与指定的格式(包括分隔符)完全匹配。通过将true作为第三个参数传递给Moment函数来设置严格模式。

在第三方API提供日期并且该API的日期格式可能更改的情况下,

宽容模式非常有用。 假设API开始时以“ yyyy-mm-DD ”格式发送日期,然后更改为“ mm/DD/yyyy ”格式。

在严格模式下,以下代码会导致显示“无效日期”:

moment('01/12/2016', 'YYYY-MM-DD', true).format()
"Invalid date"

在使用格式字符串的宽容模式下,您会得到一个错误的日期:

moment('01/12/2016', 'YYYY-MM-DD').format()
"2001-12-20T00:00:00-06:00"

另一种方法是

$(document).ready(function() {
var value = $("#unixtime").val(); //this retrieves the unix timestamp
var dateString = moment.unix(value).calendar();
alert(dateString);
});


只有它,

moment.unix(date).toDate();

此函数根据时间戳创建日期:

    function formatDateTime(dateString) {
const parsed = moment(new Date(dateString))


if (!parsed.isValid()) {
return dateString
}


return parsed.format('MMM D, YYYY, HH:mmA')
}
moment(1454521239279).toDate()
moment(1454521239279).format()
moment(timestamp).format('''any format''')

首先,您可以使用JS将时间戳转换为日期对象

const date=新日期(时间戳)

然后,您可以使用MomentJS将其格式化为您想要的格式。

const formatdate=moment(date).format(";DD/mm/yyyy";)

我有一个时间戳,比如1668919452

这样做让我得到了正确的结果:{moment.unix(created).format("l")}

我添加了.unix方法。

在此之前,时间戳登记为1970年代