Javascript 在moment.js中,是否可以有一个日期-时间字符串并保留日期,但更改时间?

Javascript 在moment.js中,是否可以有一个日期-时间字符串并保留日期,但更改时间?,javascript,momentjs,Javascript,Momentjs,我正在使用moment.js,希望用新用户输入的时间更新日期时间字符串。日期没有改变,只是时间改变了。时区没有改变,只是小时和分钟的值可能已经改变了 我如何将这样的字符串转换成不同的时间 这是我所期望的: const dateTimeString = '2017-11-14T16:04:54.0086709-06:00' const newDateTimeString = ( moment(dateTimeString) .changeTime('05:20 PM') .

我正在使用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'

如果用户输入的时间格式为
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()
    )
使用及


如果它是使用PM和AM系统格式化的,您可以使用相同的格式,但需要更多的解析,才能知道它是上午5点还是下午5点。

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

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

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

您可以使用添加
changeTime

Moment
原型通过
Moment.fn
公开。如果您想添加自己的函数,您可以将它们放在这里

您可以使用“添加时间”值创建临时时刻对象,然后使用和和之类的getter

这里有一个活样本:

moment.fn.changeTime=函数(时间串){
设m1=力矩(时间串,'hh:mm A');
返回此.set({h:m1.hours(),m:m1.minutes()});
}
const dateTimeString='2017-11-14T16:04:54.0086709-06:00'
常量newDateTimeString=(
时刻(dateTimeString)
.更改时间('05:20 PM')
.format()
)
log(newDateTimeString)

您看过现在的文档了吗?该库公开了本机日期原型中的所有基本setter函数,因此您可以创建一个日期,然后根据需要设置小时、分钟、秒和毫秒。使用该逻辑,我们只需执行
时刻('05:20 PM')
,然后获取
.hours()
.minutes()
off如果没有额外解析,对吗?@Sawtaytoes我不知道moment是否接受“5:20 PM”作为构造函数参数,但如果接受,你的想法就是你需要的,试试看:)你必须这样做:
moment('5:20 PM',“hh:mm a”)
@Sawtaytoes检查VincenzoC答案我投了赞成票,我想这正是您需要的。由于输入的格式不可识别(ISO 8601或RFC 2822),因此此代码将生成弃用警告。请参阅阅读有关可识别格式的信息,并在您的情况下使用。谢谢您的回答@VincenzoC。我其实并不想复制那个API。
format
函数实际上实现了我想要的功能,而无需使用
fn
展开
moment