如何解析以下日期结构:HHMM/DD?
How do I parse the Following Date Structure: HHMM/DD?
我有两个约会对象:
(小时:Minute/Day)
均为字符串格式。
示例 1:
主要日期:“00:10/01”(01.03.2020 - 数据可用)
次日期:“23:45/29”(29.02.2020 - 不可用(应计算))
var mainDate = moment("01.03.2020 00:10");
var secondaryDate = "23:45/29";
输出应为:29.02.2020 - 23:45
我掌握的信息
主日期:01.03.2020 [日期对象/字符串](日、月、年、时分)
辅助日期:“23:45/29”[String](时、分、日)
预期输出
它应该计算相对于主要日期的完整日期
29.02.2020
现实生活中的例子 1
预定出发时间:23:45/01(我的系统知道/01是01.01.2020)
实际出发时间:00:50/02(我的系统不知道日期)
输出应该是飞机起飞时间(时间戳)是 02.01.2020 - 00:50
现实生活中的例子 2
预定出发时间:00:45/01(我的系统知道/01是01.01.2020)
实际出发时间:23:50/31(我的系统不知道日期)
输出应该是飞机起飞时间(时间戳)是 31.12.2019 - 23:50
计算这个的函数是什么?
- NodeJS
- MomentJS
如果得到次要数据的日期部分,可以和主日期的日期部分进行比较。如果前者先于后者生效,你知道在创建完整的次要日期时要减去一个月。
function getSecondaryDate(mainDate, secondaryInfo) {
var baseDate = moment(mainDate, "DD.MM.YYYY HH:mm");
var secParts = secondaryInfo.split("/");
if (secParts.length != 2) {
// something is wrong
alert("Wrong number of parts for secondary date.");
}
var secDayOfMonth = parseInt(secParts[1]);
if (isNaN(secDayOfMonth)) {
// something went wrong
alert("Could not parse date part of secondary date '" + secDayOfMonth + "'");
}
var monthInc = 0;
if (secDayOfMonth > baseDate.date() + 15) {
monthInc = -1;
} else if (secDayOfMonth < baseDate.date() - 15) {
monthInc = 1
}
var secondaryDate = moment().year(baseDate.year()).month(baseDate.month()).add(monthInc, "month").date(secDayOfMonth);
if (!secondaryDate.isValid()) {
// something went wrong
alert("Failed to construct secondary date.");
}
return secondaryDate;
}
document.addEventListener('DOMContentLoaded', (event) => {
var mainDate = "01.03.2020 00:10";
var secondary = "23:45/29";
document.getElementById("result").innerHTML = getSecondaryDate(mainDate, secondary).format("YYYY-MM-DD") + "<br>" +
getSecondaryDate("01.01.2020 00:10", "23:50/31").format("YYYY-MM-DD");
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<body>
<p id="result"></p>
</body>
我相信您也可以从 var secTime = secParts[0].split(":");
中看到如何添加时间。
我有两个约会对象:
(小时:Minute/Day)
均为字符串格式。
示例 1:
主要日期:“00:10/01”(01.03.2020 - 数据可用)
次日期:“23:45/29”(29.02.2020 - 不可用(应计算))
var mainDate = moment("01.03.2020 00:10");
var secondaryDate = "23:45/29";
输出应为:29.02.2020 - 23:45
我掌握的信息
主日期:01.03.2020 [日期对象/字符串](日、月、年、时分)
辅助日期:“23:45/29”[String](时、分、日)
预期输出
它应该计算相对于主要日期的完整日期
29.02.2020
现实生活中的例子 1
预定出发时间:23:45/01(我的系统知道/01是01.01.2020)
实际出发时间:00:50/02(我的系统不知道日期)
输出应该是飞机起飞时间(时间戳)是 02.01.2020 - 00:50
现实生活中的例子 2
预定出发时间:00:45/01(我的系统知道/01是01.01.2020)
实际出发时间:23:50/31(我的系统不知道日期)
输出应该是飞机起飞时间(时间戳)是 31.12.2019 - 23:50
计算这个的函数是什么?
- NodeJS
- MomentJS
如果得到次要数据的日期部分,可以和主日期的日期部分进行比较。如果前者先于后者生效,你知道在创建完整的次要日期时要减去一个月。
function getSecondaryDate(mainDate, secondaryInfo) {
var baseDate = moment(mainDate, "DD.MM.YYYY HH:mm");
var secParts = secondaryInfo.split("/");
if (secParts.length != 2) {
// something is wrong
alert("Wrong number of parts for secondary date.");
}
var secDayOfMonth = parseInt(secParts[1]);
if (isNaN(secDayOfMonth)) {
// something went wrong
alert("Could not parse date part of secondary date '" + secDayOfMonth + "'");
}
var monthInc = 0;
if (secDayOfMonth > baseDate.date() + 15) {
monthInc = -1;
} else if (secDayOfMonth < baseDate.date() - 15) {
monthInc = 1
}
var secondaryDate = moment().year(baseDate.year()).month(baseDate.month()).add(monthInc, "month").date(secDayOfMonth);
if (!secondaryDate.isValid()) {
// something went wrong
alert("Failed to construct secondary date.");
}
return secondaryDate;
}
document.addEventListener('DOMContentLoaded', (event) => {
var mainDate = "01.03.2020 00:10";
var secondary = "23:45/29";
document.getElementById("result").innerHTML = getSecondaryDate(mainDate, secondary).format("YYYY-MM-DD") + "<br>" +
getSecondaryDate("01.01.2020 00:10", "23:50/31").format("YYYY-MM-DD");
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<body>
<p id="result"></p>
</body>
我相信您也可以从 var secTime = secParts[0].split(":");
中看到如何添加时间。