如何将unix时间戳转换为日历日期moment.js


141

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

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

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

Answers:


364

按照您的要求使用moment.js,有一种unix方法可以在几秒钟内接受unix时间戳:

var dateString = moment.unix(value).format("MM/DD/YYYY");

3
那不是日历日期。
伊恩·沃伯顿

1
@IanWarburton-不是吗?
马特·约翰逊

我想这是根据问题。但是我认为moment.js中的日历日期看起来像这样。...moment(new Date(item.date))。calendar()
Ian Warburton

5
@IanWarburton-您不需要在那里的新日期对象。该calendar函数很好(在此处提供文档),但不是OP要求的格式。
马特·约翰逊

1
值得注意的是,为什么这个问题失败了,但这还是可行的。原因是因为monent(number) 期望unix时间戳以毫秒为单位(与Date对象一致),而unix时间戳默认以秒为单位。因此,您也可以moment(value*1000)代替moment.unix(value),但使用起来unix更清晰。
icc97

39

UNIX时间戳是1970年以来的秒数,因此您需要将其转换为JS Date对象:

var date = new Date(unixTimestamp*1000);

是的,这是最新版本的解决方案,或者至少是我最近从npm获得的解决方案。即使我从一开始就获得.unix(),也必须在再次实例化时将*设置为* 1000。例如:moment(moment()。unix()* 1000)
kroe 2015年

与moment.js逻辑相比的最佳答案
Andris

19

Moment.js提供了可以使用的本地化格式

这是一个例子:

const moment = require('moment');

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

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

4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()

9
尽管此代码可以回答问题,但最好包含一些上下文,解释其工作原理并描述何时使用它。从长远来看,纯代码答案没有用。此外,您的代码格式不正确。
ryanyuyu


3

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

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

您可以更改格式以满足您的需求,还可以添加时区,如下所示:

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

1
这是我在这里看到的最好的方法。
LukeVenter

1
只是添加到此答案(这是此处最正确的答案)。xms UNIX时间戳记使用小写字母。这里的文档
JonTroncoso,

0

我固定了这个例子。

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

0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

严格模式宽容模式

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

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

在第三方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);
});

0

此函数从时间戳创建日期:

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

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

        return parsed.format('MMM D, YYYY, HH:mmA')
    }

0
moment(1454521239279).toDate()
moment(1454521239279).format()

0
moment(timestamp).format('''any format''')

3
尽管此代码可以解决OP的问题,但最好包含有关您的代码如何解决OP的问题的说明。这样,将来的访问者可以从您的帖子中学习,并将其应用于自己的代码。SO不是编码服务,而是知识资源。而且,更可能会推荐高质量,完整的答案。这些功能以及所有职位必须自成体系的要求,是SO作为平台的强项,可以将其与论坛区分开。您可以编辑以添加其他信息和/或在源文档中补充说明。
ysf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.