我需要将变量secondsToMinutes
添加到startdate
。
secondsToMinutes
是" 3:20"
startDate
="下午2:00"
endDate
应该等于" 2:03:20 PM"。
我已经尝试了很多方法并且每次都会出错。
var startdate = data.StartTime;
startdate = moment(startdate).format('LTS');
var secondsToMinutes = readableDuration(self.runlength());//='3:20';
var seconds = secondsToMinutes.split(':')[1];
var minutes = secondsToMinutes.split(':')[0];
var date = moment(startdate)
.add(seconds, 'seconds')
.add(minutes, 'minutes')
.format('LTS');
日期显示为无效日期。
答案 0 :(得分:9)
moment().format("LTS")
以hh:mm:ss AM/PM
格式返回字符串值。
使用非标准格式的字符串创建时刻对象时,应将输入格式作为第二个参数传递给时刻构造函数。
例如:字符串Jan 1, 2017
中的01012017
不是标准表示。但是如果您需要一个时刻对象,使用moment("01012017")
将在格式化时给出“无效日期”响应。相反,请使用moment("01012017","DDMMYYYY")
var d = moment("01012017")
d.toISOString() => "Invalid date"
var d = moment("01012017", "DDMMYYYY")
d.toISOString() => "2016-12-31T18:30:00.000Z"
在你的代码中,当创建'date'变量时,传递“hh:mm:ss A”作为矩构造函数中的第二个参数,如下所述。
var date = moment(startdate, "hh:mm:ss A")
.add(seconds, 'seconds')
.add(minutes, 'minutes')
.format('LTS');
答案 1 :(得分:3)
时刻有很好的文档。我会查看它:http://momentjs.com/docs/
但是为了更直接地解决您的问题,您可以执行以下操作:
var secondsToMinutes = '3:20';
var seconds = secondsToMinutes.split(':')[1];
var minutes = secondsToMinutes.split(':')[0];
var momentInTime = moment(...)
.add(seconds,'seconds')
.add(minutes,'minutes')
.format('LT');
您应该尽可能地使用实际的处理程序。现在你可以用持续时间做一些很酷的事情,但这更简洁。
编辑:
正如其他答案所述:
moment('2:00:00 PM', 'h:mm:ss A')
如果您正在处理 格式,则必须执行此操作。无论如何 - 向片刻对象添加/减去分钟/小时是微不足道的。将无效字符串传递给时刻对象本身就是一个不同的问题。 ;)
答案 2 :(得分:0)
在上一次moment()
通话中,您尝试解析值'2:00:00 PM'。根据文档,在这种情况下你必须使用String + Format调用:
为了解析除ISO 8601字符串以外的任何其他内容的一致结果,您应该使用String + Format。
当你这样做时:
var date = moment('2:00:00 PM')
.add(30, 'seconds')
.add(2, 'minutes')
.format('LTS');
date
将是Invalid date
。但是如果您将格式h:mm:ss A
作为第二个参数传递:
var date = moment('2:00:00 PM', 'h:mm:ss A')
.add(30, 'seconds')
.add(2, 'minutes')
.format('LTS');
...结果是2:02:30 PM
。
答案 3 :(得分:0)
.add 操作已从 moment.js 中弃用 您可以使用 dayjs 来执行相同的功能。
dayjs.add(1, 'day')
如果要寻找更多的理由从现在开始转变: https://inventi.studio/en/blog/why-you-shouldnt-use-moment-js