ReactJS:如何将unix时间戳转换为日期/从日期转换为unix时间戳的例子

859 阅读3分钟

这篇文章讲述了在reactjs/javascript中把时间戳转换为日期/从日期转换为unix时间戳

在前端应用程序中,由于客户端和服务器端的日期不同,所以日期操作有一点不同。

有些时候,从后端API返回的包含日期相关信息的数据需要格式化并转换为日期。Reactjs应用程序提供了两种方法

使用 momentjs 库 Intl DateTimeFormat

时间戳是Unix风格的长值,返回从1970/1/1 UTC开始经过的毫秒数。

在javascript中,以下是javascript提供的获取当前时间戳的方法。

你可以查看我之前关于javascript中当前时间戳的文章。

Date.now() 
new Date().getTime()
new Date().valueOff

注意,有两个时间戳,第一个是客户端运行的本地时间戳,另一个是美国服务器区的UTC时区时间戳

有多种方法,可以在reactjs中把纪元时间戳转换为日期格式。

在javascript中,Intl.DateTimeFormat提供了与日期和时间戳有关的操作方法。

DateTimeFormat接受locale信息作为第一个参数,第二个参数是选项。 它返回一个Intl.DateTimeFormat的对象,调用format方法将返回所需的日期。

下面是一个例子:将时间戳转换为日期和时间

let currentTimestamp = Date.now()
console.log(currentTimestamp); // get current timestamp
let date = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(currentTimestamp)

Locale被指定为en-US ,输出所需的日期格式在第二个参数中被提供为对象。

请注意,所有的输出日期只转换为美国的日期和时间格式。

输出:

console.log(date);
1610380287270
01/11/2021, 9:21:27 PM

下面是一个例子:仅将时间戳转换为日期

let date = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' }).format(currentTimestamp) // 01/11/2021

例子:仅将时间戳转换为时间

let date = new Intl.DateTimeFormat('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(currentTimestamp)//9:27:16 PM

让我们看看在react中把时间戳数组转换为日期的例子

完整的例子:

import React, { Component } from "react";
const empsApiData = [
    {
        id: '1',
        name: 'Franc',
        createdAt: 1610378858273

    },
    {
        id: '21',
        name: 'John',
        createdAt: 1610378858273


    },
    {
        id: '33',
        name: 'John',
        createdAt: 1610378858273

    },
    {
        id: '2',
        name: 'Krish',

    }
];
class ListComponent extends Component {


    constructor(props) {
        console.log('kiran ', empsApiData)
        super(props);
        const newEmps = empsApiData.map((emp) => ({
            "id": emp.id,
            "name": emp.name,
            "createdAt": new Intl.DateTimeFormat('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(emp.createdAt)
        }));
        this.state = {
            emps: newEmps
        }
    }



      render() {
        return (
            <div className="App">
                <ul>
                    {this.state.emps.map((item, index) => (
                        <li key={item.id}>
                            <span>{item.name}  </span>
                            <span>{item.createdAt}  </span>


                        </li>
                    ))}
                </ul>
            </div>
        );
    }
}



export default ListComponent;

在浏览器中看到的输出是

React convert timestamp to/from date

momentjs format 'YYYY-MM-DD'。

首先,安装 momentjs npm 库,如下图所示

npm install momentjs --save

接下来,将moment 类导入反应组件中

import moment from 'moment'

在react组件中,将时间戳传递给moment对象,调用格式方法,参数为'L',L表示本地化的日期格式。

moment(emp.createdAt).format('L') returns 07/11/2011

还有一种方法,你可以使用自定义格式

moment(emp.createdAt).format("YYYY-MMM-DD")

这里的日期可以是日期对象或字符串日期,它被转换为Unix的时间戳,单位是毫秒。

从给定的日期转换时间戳很简单。

首先,你必须使用new Date(String) ,将字符串转换成日期对象。接下来,在日期对象上调用getTime()方法,返回*Unix时间戳。

console.log((new Date("2021-01-01")).getTime()); // 1609459200000

示例:将当前日期转换为当前时间戳

let date      = new Date();
var timestamp = date.getTime();

momentjs valueOf方法

valueOf方法返回自纪元时间以来的Unix秒数。

与1000相乘,可以得到以mili秒为单位的时间戳。

moment("01/01/2021", "YYYY-MM-DD").valueOf() *1000

总结

在这篇文章中,你将了解到在reactjs/JavaScript中把日期转换成Unix时间戳的多种方法。

希望能对你有所帮助:-)