在我的nodejs应用程序中,我有基于用户的输入,用于完成某些任务的开始日期和开始时间。我需要将用户输入的开始日期和开始时间结合起来,并将其插入到一种 DateTime 对象格式中,如下所示:2020-05-29T10:43:39.278Z
.这是代码:
function(start_time, start_date){
const time = moment(start_time).format('LT');
console.log('show timing', time); // gives, 4:12 PM
const d = moment(start_date).format('L');
console.log('new date', d); //gives, 05/29/2020
const final_start_date = moment(d +' '+ time).format();
console.log('final_start_date', final_start_date)
}
但是console.log('final_start_date', final_start_date)
抛出的错误是:
Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 05/29/2020 4:12 PM, _f: undefined, _strict: undefined, _locale: [object Object]
Error
参数start_time
和start_date
以 Date 类型的 ISO 格式存储在 MongoDB 中。 我无法理解哪里出了问题,请帮助解决问题。
------------------更新------------------
const START_TIME = moment(start_time, "hh:mm:ss").format("LT"),
END_TIME = moment(end_time, "hh:mm:ss").format("LT");
const START_DATE = moment(start_date, "DD/MM/YYYY").format("L"),
END_DATE = moment(end_date, "DD/MM/YYYY").format("L");
console.log("START-TIME: ", START_TIME);
console.log("END-TIME: ", END_TIME)
console.log("START-DATE: ", START_DATE);
console.log("END-DATE: ", END_DATE)
const START_AT = moment(START_DATE + " " + START_TIME, "DD/MM/YYYY hh:mm:ss").format(),
END_AT = moment(END_DATE + " " + END_TIME, "DD/MM/YYYY hh:mm:ss").format();
console.log("START-AT: ", START_AT);
console.log("END-AT: ", END_AT)
console.logs((
START-TIME: 8:29 PM
END-TIME: 8:30 PM
START-DATE: 05/29/2020
END-DATE: 05/29/2020
START-AT: Invalid date
END-AT: Invalid date
在将字符串传递到 moment 时,最好使用 ISO 8601 格式(没有格式字符串(,我们可以通过将时间和日期分别格式化为这种格式,然后连接来做到这一点。
function createFinalStartDate(start_time, start_date){
const time = moment(start_time).format('HH:mm:ss');
console.log('Time component:', time);
const d = moment(start_date).format('YYYY-MM-DD');
console.log('Date component:', d);
let isoTimestamp = `${d}T${time}`;
console.log("ISO 8601 timestamp:", isoTimestamp);
const final_start_date = moment(isoTimestamp).format();
console.log('final_start_date', final_start_date)
}
function test() {
let start_time = new Date();
let start_date = new Date();
createFinalStartDate(start_time, start_date);
}
test();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
moment(( 需要 2 个参数
- 日期字符串
- 格式
您需要传递第二个参数,以便它正确转换您的日期。
只是为每个时刻添加了格式构造函数和弃用警告消失了。
将您的代码修改为:
var fn = function(start_time, start_date){
const time = moment(start_time, "h:mm a").format('LT');
console.log('show timing', time); // gives, 4:12 PM
const d = moment(start_date, "MM/DD/YYYY").format('L');
console.log('new date', d); //gives, 05/29/2020
const final_start_date = moment(d +' '+ time, "MM/DD/YYYY h:mm a").format();
console.log('final_start_date', final_start_date)
}
fn("4:12 PM", "05/29/2020");
注意:如果在ISO中传递日期字符串,则不需要第二个参数 像这样的格式("2020-05-29T16:55:35+05:30"(.format((
时刻.js
moment(start_time).format('HH:mm:ss').toString()
;