在 React js 中创建 Date 对象的有效方法

Posted

技术标签:

【中文标题】在 React js 中创建 Date 对象的有效方法【英文标题】:Efficient way to create a Date object in react js 【发布时间】:2021-11-12 17:40:36 【问题描述】:

我有以下为我创建组件的函数:

 renderComments(comments)
        const listcomments = comments.map((comment) => 
            return (
                <li key=comment.id>
                    <div className="row">
                        comment.comment
                    </div>
                    <div className="row">
                        -- comment.author , comment.date
                    </div>
                </li>
            );
        );
        return(
            <ul className = "list-unstyled">
                listcomments
            </ul>
        );

    

我的问题是 comment.date 的格式很奇怪:“2014-09-05T17:57:28.556094Z”

我想更改格式,但仅键入 Date.parse(comment.date) 不起作用(它无法将 Date.parse 识别为函数)。我在网上和 SO 中找到了如何通过声明一个新变量来创建一个 Date 对象,但我真的不能在 return 中这样做吗?

我是新手,所以如果有人可以帮助我以有效的方式将 comment.date 转换为正常格式,那就太好了。

【问题讨论】:

我得说提问有点吓人...我的问题刚刚发布,并且已经获得了密切的投票。我真的尽量让我的问题尽可能清楚,而不是问以前问过的东西。在我发布问题之前,我会收到一条警告,说我可能会被禁止提问...... 您想要的日期格式是什么?听起来您可能对Intl.DateTimeFormat 感兴趣。我认为这个问题与 React 没有任何关系。如果是这样,那么也许您可以澄清什么是 React 特定的? 您的日期采用ISO_8601 格式,这是javascript Date 对象无需解析即可识别的标准。所以你可以简单地new Date('2014-09-05T17:57:28.556094Z'),然后按你的意愿格式化。 @jsejcksn 这里的问题是我需要解析返回中的日期,因为我尝试创建一个组件。如果它是与反应无关的普通 JS 代码,我就不会遇到这个问题。因此,除非我遗漏了什么,否则这是一个与反应相关的问题。 在返回中很好,但正如下面的答案所述,返回是用 JSX 编写的,而不是普通的 javascript。因此,任何 javascript 都需要用大括号括起来。您可以尝试-- comment.author, new Date(comment.date).toLocaleDateString() 并阅读更多关于toLocaleDateString() 【参考方案1】:

Date.parse确实是一个函数。

console.log(Date.parse);

您需要做的就是将正确类型的参数传递给它。您当前的代码

Date.parse(comment.date)

是无效的语法,因为对象需要键值对。将仅注释日期字符串传递给它,它会起作用 - 但是,Date.parse 返回一个时间戳编号,而不是 Date 对象。如果您想要一个 Date 对象,请使用new Date,然后您可以使用various Date methods 从中提取您想要的内容。

const d = new Date("2014-09-05T17:57:28.556094Z");
console.log(d.getMinutes());

【讨论】:

先谢谢你的回答,我试试。但我承认我不太明白,comment.date 不应该只是评论日期字符串吗? 似乎当我在返回函数中时,Date 只是被翻译为普通字符串......对于“const”关键字和许多其他关键字也是如此。看来我必须在返回之外解析日期,这会使事情复杂化。 comment.date 是从名为comment 的对象中提取date 属性的正确纯语法。 comment.date 在 JavaScript 中是无效的语法。但是 JSX 使用括号 来分隔 JavaScript 表达式到 JSX 标记中的插值。 嗯,但不幸的是我不能让 jsx 将 Date.parse 作为一个函数插入到 return 语句中......它将它作为普通字符串读取,这就是为什么 const d = new Date(" 2014-09-05T17:57:28.556094Z");不适合我:( 如果你想分配一个标识符并在返回之前使用这个值做一些事情,你还需要一个函数,或者是一个预先命名的函数,或者一个 IIFE。 const parseDateString = (dateStr) =&gt; /* do stuff and return */ 然后在 JSX 中你可以做 parseDateString(comment.date)

以上是关于在 React js 中创建 Date 对象的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

在 React.js 中创建范围滑块

如何在 react.js 中创建动态网格?

如何使用 React js JSX 在下拉列表中创建年份列表

如何在 React js 中创建状态数组

如何在 Vue.js 中创建 Date(now) 以在计算属性中使用?

在 React JS 中创建 <select> 元素