我正在使用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'
答案 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()
)