如何获取开始日期和结束日期之间的日期,结果日期应采用数组格式,使用 javascript
How to get dates that are between Start date and End date and result date should be in an array format, using javascript
- 我正在尝试将日期从完整日期中拆分出来并计算它们之间的范围并将它们插入数组以将其添加到数据库中。
<script>
function()
{
var sd = "26-04-2020";
var a = sd.split("-");
var ed = "28-04-2020";
var b = ed.split("-");
var p1= a[1];
var p2= a[2];
var p3= a[3];
var q1= b[1];
var q2= b[2];
var q3= b[3];
var datearry = [];
if( p1<q1 && p2=q2 && p3=q3)
{
for (i=p1; i<q1; i++)
{
datearry = ("i"+"p2"+"p3");
}
}
else if( p1<q1 && p2<q2 && p3=q3)
{
for (i=p1; i<q1; i++)
{
for (j=p2; j<q2; j++)
{
datearry = ("i"+"j"+"p3");
}
}
}
else if( p1<q1 && p2<q2 && p3<q3)
{
for (i=p1; i<q1; i++)
{
for (j=p2; j<q2; j++)
{
for (k=p3; k<q3; k++)
{
datearry = ("i"+"j"+"k");
}
}
}
}
alert(datearry);
}
</Script>
- 我没有得到预期的结果,请任何人提供一些建议,甚至可以提供有效的代码,谢谢。
您的代码有很多问题:
function()
{
是语法错误,函数声明需要函数名。
datearry = ("i"+"p2"+"p3");
datearray 被初始化为一个数组,但这里分配了一个字符串文字(字面意思是 "ip2p3")。你的意思可能是:
datearray.push(String(i) + p3 + p3);
第一次会添加一个像“26042020”这样的字符串,但是随着算法的进展和字符串变成数字,你会开始得到像“152020”这样的值,代表 2020 年 3 月 1 日。所以你需要一些填充,可能还有一个分隔符,以获得“01-05-2020”并匹配输入格式。
最后,代码似乎没有正确适应月和年边界的转换。修复它真的没有用,因为它比它需要的要复杂得多,或者我准备打扰,因为有更简单的选择。 :-)
如果您要查找两个日期之间的时间戳数组,一种策略是将时间戳转换为日期,然后遍历所需的范围,将所需的输出时间戳存储在数组中。
现有问题涉及how to parse a date string and how to format a date。您可以将它们放在一起以创建如下所示的函数:
// startDate, endDate in format dd-mm-yyyy
// Return array of dates inclusive of start and end in same format
function getDateRange(startDate, endDate) {
// Parse dd-mm-yyyy
let qParse = s => {
let [d, m, y] = s.split(/\D/);
return new Date(y, m-1, d);
};
// Format date as dd-mm-yyyy
let qFormat = d => {
let z = n => (n<10? '0' : '') + n;
return z(d.getDate())+'-'+z(d.getMonth()+1)+'-'+d.getFullYear();
}
// Setup for loop
let start = qParse(startDate);
let end = qParse(endDate);
let result = [];
// Loop from start to end, incrementing
// the start date and writing to result array
do {
result.push(qFormat(start));
start.setDate(start.getDate() + 1);
} while (start <= end)
return result;
}
console.log(getDateRange('26-02-2020','03-03-2020'));
// Different delimiters in input
console.log(getDateRange('28.12.2020','03/01/2021'));
您还应该验证输入。解析和格式化函数在函数中被关闭,因为它们仅设计用于 OP 的特定格式(即它们不是一般的解析或格式化函数)。
- 我正在尝试将日期从完整日期中拆分出来并计算它们之间的范围并将它们插入数组以将其添加到数据库中。
<script>
function()
{
var sd = "26-04-2020";
var a = sd.split("-");
var ed = "28-04-2020";
var b = ed.split("-");
var p1= a[1];
var p2= a[2];
var p3= a[3];
var q1= b[1];
var q2= b[2];
var q3= b[3];
var datearry = [];
if( p1<q1 && p2=q2 && p3=q3)
{
for (i=p1; i<q1; i++)
{
datearry = ("i"+"p2"+"p3");
}
}
else if( p1<q1 && p2<q2 && p3=q3)
{
for (i=p1; i<q1; i++)
{
for (j=p2; j<q2; j++)
{
datearry = ("i"+"j"+"p3");
}
}
}
else if( p1<q1 && p2<q2 && p3<q3)
{
for (i=p1; i<q1; i++)
{
for (j=p2; j<q2; j++)
{
for (k=p3; k<q3; k++)
{
datearry = ("i"+"j"+"k");
}
}
}
}
alert(datearry);
}
</Script>
- 我没有得到预期的结果,请任何人提供一些建议,甚至可以提供有效的代码,谢谢。
您的代码有很多问题:
function()
{
是语法错误,函数声明需要函数名。
datearry = ("i"+"p2"+"p3");
datearray 被初始化为一个数组,但这里分配了一个字符串文字(字面意思是 "ip2p3")。你的意思可能是:
datearray.push(String(i) + p3 + p3);
第一次会添加一个像“26042020”这样的字符串,但是随着算法的进展和字符串变成数字,你会开始得到像“152020”这样的值,代表 2020 年 3 月 1 日。所以你需要一些填充,可能还有一个分隔符,以获得“01-05-2020”并匹配输入格式。
最后,代码似乎没有正确适应月和年边界的转换。修复它真的没有用,因为它比它需要的要复杂得多,或者我准备打扰,因为有更简单的选择。 :-)
如果您要查找两个日期之间的时间戳数组,一种策略是将时间戳转换为日期,然后遍历所需的范围,将所需的输出时间戳存储在数组中。
现有问题涉及how to parse a date string and how to format a date。您可以将它们放在一起以创建如下所示的函数:
// startDate, endDate in format dd-mm-yyyy
// Return array of dates inclusive of start and end in same format
function getDateRange(startDate, endDate) {
// Parse dd-mm-yyyy
let qParse = s => {
let [d, m, y] = s.split(/\D/);
return new Date(y, m-1, d);
};
// Format date as dd-mm-yyyy
let qFormat = d => {
let z = n => (n<10? '0' : '') + n;
return z(d.getDate())+'-'+z(d.getMonth()+1)+'-'+d.getFullYear();
}
// Setup for loop
let start = qParse(startDate);
let end = qParse(endDate);
let result = [];
// Loop from start to end, incrementing
// the start date and writing to result array
do {
result.push(qFormat(start));
start.setDate(start.getDate() + 1);
} while (start <= end)
return result;
}
console.log(getDateRange('26-02-2020','03-03-2020'));
// Different delimiters in input
console.log(getDateRange('28.12.2020','03/01/2021'));
您还应该验证输入。解析和格式化函数在函数中被关闭,因为它们仅设计用于 OP 的特定格式(即它们不是一般的解析或格式化函数)。