【问题标题】:moment.js concatenate date and timemoment.js 连接日期和时间
【发布时间】:2017-07-13 06:29:54
【问题描述】:

我在一个表单中有四个字段,其中一些包含初始日期和结束日期 (dd / mm / yyyy),其他包含开始时间和结束时间 (hh: ss)。

我使用 moment.js 获取日期和时间的这些字段的值,例如:

initialdate = moment( $('input#start_date').val(), 'DD/MM/YYYY' );
start_time = moment( $('input#start_time').val(), 'HH:mm');
enddate = moment( $('input#enddate').val(), 'DD/MM/YYYY' );
end_time = moment( $('input#end_time').val(), 'HH:mm');

我打算然后得到两个日期之间的秒差,连接开始日期和时间以及结束日期和时间。我尝试过这样做,但无济于事:

start = initialdate + start_time;
end = enddate + end_time;
tracker = moment.duration( end.diff(start) ).asSeconds();

【问题讨论】:

    标签: javascript date datepicker momentjs


    【解决方案1】:

    连接日期和时间字符串并将它们解析为一个,例如

    var date = '23/02/2017';
    var time = '15:42';
    
    var dateTime = moment(date + ' ' + time, 'DD/MM/YYYY HH:mm');
    
    console.log(dateTime.format('YYYY-MM-DD HH:mm'))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

    【讨论】:

      【解决方案2】:

      失败是尝试连接值,用这样的东西进行测试:

      let initialdate = '2016-10-01';
      let start_time = '19:04:10';
      let enddate = '2016-10-01';
      let end_time = '19:04:20';
      
      let datetimeA = moment(initialdate + " " + start_time);
      let datetimeB = moment(enddate + " " + end_time);
      
      console.log(datetimeA.format());
      console.log(datetimeB.format());
      
      let datetimeC = datetimeB.diff(datetimeA, 'seconds');
      
      console.log(datetimeC);
      

      【讨论】:

      • initialdate + start_date 失败,因为此时它们都是 Moment 对象。
      【解决方案3】:

      [2021] 最优雅的解决方案是:

      /* `date` and `time` are instances of Moment */
      
          date = date.set({
                hour: time.get('hour'),
                minute: time.get('minute'),
                second: 0,
                millisecond: 0,
              });
      
      

      【讨论】:

      • 上午或下午呢?
      • 此解决方案确认可以使用上午/下午时间。
      【解决方案4】:

      IMO 更清洁的解决方案是使用 moment 的 hourminute getter 和 setter。

      let a = moment()
      let b = moment().add(3, 'hour').add(37, 'minute') //b is the time portion
      a.hour(b.hour()).minute(b.minute())
      

      【讨论】:

        【解决方案5】:

        只需使用此功能

        function getCombinedDateObject(date, time) {
        let calculatedDateString = '';
        if (date && time) {
          let utcDate = moment.utc(date);
          let utcTime = moment.utc(time);
          calculatedDateString = moment(`${utcDate.format('YYYY-MM-DD')} ${utcTime.format("HH:mm:ss z")}`);
        }
        let finalDateTime = new Date(calculatedDateString);
        if (isNaN(finalDateTime.getTime()))
          return null;
        else
          return finalDateTime;
        }
        

        【讨论】:

          【解决方案6】:

          我的回答很简单, 我只是将日期时间更改如下:

          const date = new Date(myDate)
          const time = new Date(myTime)
          date.setHours(time.getHours())
          date.setMinutes(time.getMinutes())
          

          【讨论】:

            猜你喜欢
            • 2017-12-10
            • 1970-01-01
            • 1970-01-01
            • 2019-03-31
            • 1970-01-01
            • 1970-01-01
            • 2013-01-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多