Javascript 如何使用日期时间中的时间段

Javascript 如何使用日期时间中的时间段,javascript,reactjs,date,momentjs,formik,Javascript,Reactjs,Date,Momentjs,Formik,我有一个表单,从输入中发送年和月的值,然后在将值发送到服务器时,我将该值转换为ISO字符串,如下所示: const toIsoString = (year, month, day) => moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0]; 然后在值中,我像这样使用它 StartDate: toIsoString(data.StartYear, parseInt(data.StartMonth, 1

我有一个表单,从输入中发送年和月的值,然后在将值发送到服务器时,我将该值转换为ISO字符串,如下所示:

const toIsoString = (year, month, day) => moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];
然后在值中,我像这样使用它

StartDate: toIsoString(data.StartYear, parseInt(data.StartMonth, 10), 1),
在这种情况下,它发送的值如下所示:

startDate: "2021-01-01T00:00:00"

有人知道为什么时间段被忽略了吗?我如何发送带有年、月和日期值的时间段。如果有任何帮助,我们将不胜感激。谢谢…

这是因为您在创建矩对象时只设置了年、月和日期。你没有设定时间

你应该这样做

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.year(year);
    currDate.month(month - 1);
    currDate.date(day);
    return currDate.toISOString(true).split('.')[0];
}
或者只需使用
set
功能

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.set({
        'year': year,
        'month': (month - 1),
        'date': day
    });
    return currDate.toISOString(true).split('.')[0];
}

这是因为您在创建矩对象时仅设置年、月和日期。你没有设定时间

你应该这样做

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.year(year);
    currDate.month(month - 1);
    currDate.date(day);
    return currDate.toISOString(true).split('.')[0];
}
或者只需使用
set
功能

const toIsoString = (year, month, day) => {
    const currDate = moment(new Date());
    currDate.set({
        'year': year,
        'month': (month - 1),
        'date': day
    });
    return currDate.toISOString(true).split('.')[0];
}
是否有人知道为什么时间段被忽略,以及我如何发送带有年、月和日期值的时间段。如有任何帮助,将不胜感激

时间是不容忽视的。在函数中:

const toIsoString = (year, month, day) => 
  moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];
忽略小时、分钟、秒和毫秒的值,因此它们默认为0。你预计什么时候

如果要将当前本地时间添加到日期中,则创建一个日期,并将年、月和日设置为所需的值,而不修改时间(尽管我不知道为什么要这样做)

不要创建需要进一步处理的字符串,而是告诉moment.js您想要的格式:

函数toIsoString(年、月、日){
返回时刻(新日期().setFullYear(年、月、日)).format('YYYY-MM-DD HH:MM:ss');
}
log(toIsoString('2021','1','1')
是否有人知道为什么时间段被忽略,以及我如何发送带有年、月和日期值的时间段。如有任何帮助,将不胜感激

时间是不容忽视的。在函数中:

const toIsoString = (year, month, day) => 
  moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];
忽略小时、分钟、秒和毫秒的值,因此它们默认为0。你预计什么时候

如果要将当前本地时间添加到日期中,则创建一个日期,并将年、月和日设置为所需的值,而不修改时间(尽管我不知道为什么要这样做)

不要创建需要进一步处理的字符串,而是告诉moment.js您想要的格式:

函数toIsoString(年、月、日){
返回时刻(新日期().setFullYear(年、月、日)).format('YYYY-MM-DD HH:MM:ss');
}
log(toIsoString('2021','1','1')

你能把
时刻
函数放在这里吗?该时刻函数来自moment.js library你在创建日期时不设置时间,所以它默认为00:00:00.000,你期望什么时间?当前时间…你能把
moment
函数放在这里吗?这个moment函数来自moment.js library你在创建日期时没有设置时间,所以它默认为00:00:00.000,你期望什么时间?当前时间…包括小时、分钟、秒吗,至少我试过了,但仍然得到了同样的回答你试过什么?你能更新你的代码吗?据我所知,这两种技术应该可以工作,我已经用你的替换了我的toIsoString,但是当发送值时,时间段似乎仍然被忽略了,我是否也应该在这里做一些更改StartDate:toIsoString(data.StartYear,parseInt(data.StartMonth,10),1),这包括小时、分钟、秒,至少我试过了,但仍然得到了同样的回答你试过什么?你能更新你的代码吗?据我所知,这两种技术应该可以工作,我已经用你的替换了我的toIsoString,但是在发送值时,时间段似乎仍然被忽略,我是否也应该在这里做一些更改StartDate:toIsoString(data.StartYear,parseInt(data.StartMonth,10),1),