我想以字符串格式获取今天的日期(例如:2/08/2023)在useState
钩子变量中作为初始值。
当前工作代码:
const [startDate, setStartDate] = useState(new Date());
// output: Wed Aug 02 2023 12:52:16 GMT+0800 (Australian Western Standard Time)
字符串
以下是我尝试输出的内容(2/08/2023):
// Trial #1
const [startDate, setStartDate] = useState(new Date().toLocaleDateString());
// Trial #2
let today = new Date().toLocaleDateString()
const [startDate, setStartDate] = useState(today)
型
不幸的是,这两种方法都会产生以下错误:
Uncaught RangeError: Invalid time value.
型
有没有人能猜到怎么解决这个问题?谢谢你,谢谢
4条答案
按热度按时间bweufnob1#
发生
Uncaught RangeError: Invalid time value
错误是因为toLocaleDateString()
方法返回的日期格式为dd/mm/yyyy
,这不是直接创建JavaScript Date对象的有效输入。要将startDate
的初始值设置为2/08/2023
的字符串,可以使用Date对象的getFullYear()
、getMonth()
和getDate()
方法手动设置日期的格式。以下是您可以实现这一点的方法:
字符串
在这段代码中,我们首先创建一个新的Date对象,然后以
dd/mm/yyyy
手动构造所需的日期字符串。getMonth()
方法返回0到11之间的值,其中0表示1月,1表示2月,依此类推。因此,我们将getMonth()
值加1以获得正确的月数。这应该将
startDate
的初始值设置为今天的日期,格式为2/08/2023
。yiytaume2#
你可以使用moment.js包:
npm i矩
并用途:
字符串
或者是
型
就像这样:
型
文件:https://momentjs.com/
fcipmucu3#
范围错误:出现无效时间值错误的原因是,toLocaleDateString()方法返回格式为“M/D/YYYY”(例如,“8/2/2023”)的字符串,并且当您将此字符串传递给useState挂接时,它尝试从该字符串创建新的Date对象,但无法识别该格式,从而导致错误。
要解决此问题并将今天的日期以“2/08/2023”格式存储在useState挂接变量中,您可以在将日期传递给挂接之前手动设置日期格式。实现这一点的一种方法是创建自定义格式函数。
以下是您的操作方法:
字符串
在此代码中,formatDate函数接受Date对象并返回“D/MM/YYYY”格式的格式化日期字符串。它使用getDate()、getMonth()和getFullYear()方法分别提取日、月和年组件。padStart方法用于确保日和月组件始终为两位数。“
现在,startDate变量将以所需的格式(“2/08/2023”)保存今天的日期作为初始值。
vlju58qv4#
您的两种方法也适用于我的本地项目。
你有没有使用过任何传递状态的库?例如,下面的错误来自react-datepicker库:Getting a RangeError: Invalid Time Value when using React datepicker