使用导致弃用警告的时刻组合日期和时间



在我的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_timestart_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 个参数

  1. 日期字符串
  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();

最新更新