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

时间:2017-11-14 22:38:57

标签: javascript momentjs

我正在使用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 :(得分:2)

没有内置功能,例如changeTime,您可以使用set编写自己的功能。

您可以使用moment.fn

添加changeTime
  

Moment原型通过moment.fn公开。如果你想添加自己的功能,那就是你要放置它们的地方。

您可以使用moment(String, String)创建一个临时对象,其中包含“添加时间”值,然后使用set(Object(String, Int))以及hours()minutes()等内容。

这是一个实时样本:

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>

答案 1 :(得分:1)

如果用户输入的时间格式为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.00 AM还是PM。

答案 2 :(得分:0)

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

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