开发者问题收集

React JS 获取当前日期

2017-05-02
350114

我想在我的组件中输出当前日期。 在控制台中我的代码可以运行,但 React 控制台显示:

bundle.js:14744 Uncaught RangeError: Maximum call stack size exceeded

我的组件如下所示:

import React from 'react';
var FontAwesome = require('react-fontawesome');

export class Date extends React.Component {
    constructor() {
        super();

        var today = new Date(),
            date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();

        this.state = {
            date: date
        };
    }

    render() {
        return (
            <div className='date'>
                <FontAwesome name='calendar' />{this.state.date}
            </div>
        );
    }
}
3个回答

您的问题在于您将组件类命名为 Date 。当您在类中调用 new Date() 时,它不会创建您期望它创建的 Date 实例(很可能是 Date )- 它将尝试创建您的组件类的实例。然后构造函数将尝试创建另一个实例,然后是另一个实例,然后是另一个实例……直到您用尽堆栈空间并收到您看到的错误。

如果您想在类中使用 Date ,请尝试将类命名为其他名称,例如 CalendarDateComponent

这样做的原因是 JavaScript 处理名称范围的方式:每当您创建一个新命名的实体时,如果范围内已经有一个同名的实体,则该名称将停止引用前一个实体并开始引用您的新实体。因此,如果您在名为 Date 的类中使用名称 Date ,则名称 Date 将引用该类,而不是在类定义开始之前存在的任何名为 Date 的对象。

Pedro Castilho
2017-05-02

选项 1 : 如果您想要创建一个通用的实用函数,那么您可以使用这个

export function getCurrentDate(separator=''){

let newDate = new Date()
let date = newDate.getDate();
let month = newDate.getMonth() + 1;
let year = newDate.getFullYear();

return `${year}${separator}${month<10?`0${month}`:`${month}`}${separator}${date}`
}

并通过将其导入为

import {getCurrentDate} from './utils'
console.log(getCurrentDate())

选项 2 : 或者直接在类中定义和使用

getCurrentDate(separator=''){

let newDate = new Date()
let date = newDate.getDate();
let month = newDate.getMonth() + 1;
let year = newDate.getFullYear();

return `${year}${separator}${month<10?`0${month}`:`${month}`}${separator}${date}`
}
Abhinav Chandra
2019-02-18

完整日期和时间:

{new Date().toLocaleString() + ""}

仅提取月份(当前):

{new Date().toLocaleString("en-US", { month: "long" })}

仅提取日期:

{new Date().toLocaleString("en-US", { day : '2-digit'})}

仅提取年份:

{new Date().getFullYear()}
Mahadi Hassan
2021-05-26