【问题标题】:How to use the Time period in date time如何在日期时间中使用时间段
【发布时间】:2020-05-30 09:44:29
【问题描述】:

我有一个表单,它从输入中发送年份和月份的值,然后在将值发送到服务器时,我将该值转换为 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"

有谁知道为什么时间段被忽略,我怎样才能发送带有年份、月份和日期值的时间段。任何帮助将不胜感激。谢谢...

【问题讨论】:

  • 你能把moment函数放在这里吗?
  • 那个moment函数来自moment.js库
  • 创建日期时没有设置时间所以默认为00:00:00.000,你预计几点?
  • 当前时间...

标签: javascript reactjs date momentjs formik


【解决方案1】:

有谁知道为什么忽略时间段以及如何发送带有年、月和日期值的时间段。任何帮助将不胜感激。

时间不会被忽略。在函数中:

const toIsoString = (year, month, day) => 
  moment(new Date(year, month - 1, day)).toISOString(true).split('.')[0];

小时、分钟、秒和毫秒的值被省略,因此它们默认为 0。您期望什么时间?

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

与其创建需要进一步处理的字符串,不如告诉 moment.js 你想要的格式:

function toIsoString (year, month, day) { 
  return moment(new Date().setFullYear(year, month-1, day)).format('YYYY-MM-DD HH:mm:ss');
}

console.log(toIsoString('2021','1','1'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>

您也可以在没有库的情况下执行此操作,请参阅 How to format a JavaScript date,例如:

function formatDate(year, month, date) {
  let z = n => (n<10?'0':'') + Number(n);
  return `${year}-${z(month)}-${z(date)} ${
    new Date().toLocaleString('en',{
      hour12:false,
      hour:'2-digit', 
      minute:'2-digit', 
      second:'2-digit'})
  }`;
}

console.log(formatDate('2021','1','01'))

【讨论】:

    【解决方案2】:

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

    你应该做类似的事情

    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];
    }
    

    【讨论】:

    • 是否包括小时、分钟、秒,至少我已经尝试过并且仍然得到相同的响应
    • 你尝试了什么?你能更新你的代码吗?据我所知,这两种技术应该有效
    • 我已经用你的 toIsoString 替换了我的 toIsoString 但是在发送值时似乎仍然忽略了时间段,,
    • 我还要在这里做一些更改吗 StartDate: toIsoString(data.StartYear, parseInt(data.StartMonth, 10), 1),
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2019-08-18
    • 2023-03-06
    相关资源
    最近更新 更多