首页 文章

在moment.js中,是否可以使用日期时间字符串并保留日期但更改时间?

提问于
浏览
-1

我正在使用moment.js并希望使用新的用户输入时间更新日期时间字符串 . 日期没有改变,只有时间 . 没有时区变化,只是小时和分钟值可能已经改变 .

我如何采取这样的字符串并将其转换为时间不同?

我希望这是:

const dateTimeString = '2017-11-14T16:04:54.0086709-06:00'
const newDateTimeString = (
    moment(dateTimeString)
    .changeTime('05:20 PM')
    .format()
)
// newDateTimeString === '2017-11-14T17:20:00.0086709-06:00'

3 回答

  • 0

    如果用户输入的时间格式为 13:00 ,您可以这样做:

    const dateTimeString = '2017-11-14T16:04:54.0086709-06:00'
    var userInput = "13:20"
        const newDateTimeString = (
            moment(dateTimeString)
            .hours(userInput.split(":")[0])
            .minutes(userInput.split(":")[1])
            .format()
        )
    

    使用https://momentjs.com/docs/#/get-set/hour/https://momentjs.com/docs/#/get-set/minute/

    如果它使用PM和AM系统进行格式化,您可以使用相同的方法,但需要进行一些解析,以确定它是上午5点还是下午 .

  • 1

    没有像 changeTime 这样的内置函数,您可以使用set编写自己的函数 .

    您可以使用moment.fn添加 changeTime

    片刻原型通过moment.fn暴露 . 如果你想添加自己的功能,那就是你要放置它们的地方 .

    您可以使用moment(String, String)创建"time to add"值的临时对象,然后使用set(Object(String, Int))hours()minutes()等getter .

    这是一个实时样本:

    moment.fn.changeTime = function(timeString) {
      let m1 = moment(timeString, 'hh:mm A');
      return this.set({h: m1.hours(), m: m1.minutes()});
    }
    
    const dateTimeString = '2017-11-14T16:04:54.0086709-06:00'
    const newDateTimeString = (
        moment(dateTimeString)
        .changeTime('05:20 PM')
        .format()
    )
    
    console.log(newDateTimeString);
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>
    
  • 2

    一种可能的方法是使用时刻获取日期,然后将其与您在另一个 moment() 调用中的自定义时间值组合,如下所示:

    const newDateTimeString = (
        moment(`${moment(dateTimeString).format('YYYY-MM-DD')} 05:20 PM`)
        .format()
    )
    

相关问题