JavaScript: 如何获取没有时区的简单日期
JavaScript: How to get simple date without timezone
我有代码在一个日期范围内生成随机日期,它给我的日期在记录时会产生这种格式:
Wed Sep 25 2019 05:00:00 GMT+0500 (Pakistan Standard Time)
我只想获取没有时区和日期的日期,具体如下:
2019-09-25
我正在尝试使用以下代码获取指定日期之间的随机日期:
var startDate = new Date("2019-08-26"); //YYYY-MM-DD
var endDate = new Date("2019-09-25"); //YYYY-MM-DD
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
function shuffle(arra1) {
var ctr = arra1.length, temp, index;
// While there are elements in the array
while (ctr > 0) {
// Pick a random index
index = Math.floor(Math.random() * ctr);
// Decrease ctr by 1
ctr--;
// And swap the last element with it
temp = arra1[ctr];
arra1[ctr] = arra1[index];
arra1[index] = temp;
}
return arra1; }
console.log(shuffle(dateArr));
这不是一个重复的问题,因为我试图获得不同且非常具体的甲酸。
使用 .toISOString()
和 .substr()
。示例:
var dt = new Date("2019-09-25");
console.log(dt.toISOString().substr(0,10)); // 2019-09-25
这种方式的好处是Date
对象内置了.toISOString()
方法,不用重新造轮子。不过,该方法 returns 是一个完整的 ISO 字符串,例如“2019-09-25T00:00:00.000Z”。因此,您可以使用 .substr
来仅检索您要使用的部分。
一个解决方案是通过自定义格式函数(即 formatDate()
)映射 arra1
的每个项目,其中 .getDate()
、.getMonth()
和 .getYear()
用于填充格式化字符串:
function formatDate(date) {
const year = date.getFullYear();
/* getMonth returns dates from 0, so add one */
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month < 10 ? '0' : ''}${ month }-${ day < 10 ? '0' : '' }${day}`
}
这里需要考虑的几点是:
Date#getMonth()
returns 0-indexed dates 范围为0-11。要匹配所需的日期格式,您应该添加 1
,如图所示
- 检查小于
10
的日期和月份值并添加前缀 0
以填充这些数字以获得所需的格式
这可以添加到您现有的代码中,如下所示:
var startDate = new Date("2019-08-26"); //YYYY-MM-DD
var endDate = new Date("2019-09-25"); //YYYY-MM-DD
function formatDate(date) {
const year = date.getFullYear();
/* getMonth returns dates from 0, so add one */
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month < 10 ? '0' : ''}${ month }-${ day < 10 ? '0' : '' }${day}`
}
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
function shuffle(arra1) {
var ctr = arra1.length,
temp, index;
// While there are elements in the array
while (ctr > 0) {
// Pick a random index
index = Math.floor(Math.random() * ctr);
// Decrease ctr by 1
ctr--;
// And swap the last element with it
temp = arra1[ctr];
arra1[ctr] = arra1[index];
arra1[index] = temp;
}
/* Update this line */
return arra1.map(formatDate);
}
console.log(shuffle(dateArr));
var getDates = function(startDate, endDate) {
var dates = [],
currentDate = startDate,
addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
};
while (currentDate <= endDate) {
dates.push(currentDate);
currentDate = addDays.call(currentDate, 1);
}
return dates;
};
// Usage
var dates = getDates(new Date(2019, 10, 22),
new Date(2019, 11, 25));
dates.forEach(function(date) {
console.log(date);
});
我有代码在一个日期范围内生成随机日期,它给我的日期在记录时会产生这种格式:
Wed Sep 25 2019 05:00:00 GMT+0500 (Pakistan Standard Time)
我只想获取没有时区和日期的日期,具体如下:
2019-09-25
我正在尝试使用以下代码获取指定日期之间的随机日期:
var startDate = new Date("2019-08-26"); //YYYY-MM-DD
var endDate = new Date("2019-09-25"); //YYYY-MM-DD
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
function shuffle(arra1) {
var ctr = arra1.length, temp, index;
// While there are elements in the array
while (ctr > 0) {
// Pick a random index
index = Math.floor(Math.random() * ctr);
// Decrease ctr by 1
ctr--;
// And swap the last element with it
temp = arra1[ctr];
arra1[ctr] = arra1[index];
arra1[index] = temp;
}
return arra1; }
console.log(shuffle(dateArr));
这不是一个重复的问题,因为我试图获得不同且非常具体的甲酸。
使用 .toISOString()
和 .substr()
。示例:
var dt = new Date("2019-09-25");
console.log(dt.toISOString().substr(0,10)); // 2019-09-25
这种方式的好处是Date
对象内置了.toISOString()
方法,不用重新造轮子。不过,该方法 returns 是一个完整的 ISO 字符串,例如“2019-09-25T00:00:00.000Z”。因此,您可以使用 .substr
来仅检索您要使用的部分。
一个解决方案是通过自定义格式函数(即 formatDate()
)映射 arra1
的每个项目,其中 .getDate()
、.getMonth()
和 .getYear()
用于填充格式化字符串:
function formatDate(date) {
const year = date.getFullYear();
/* getMonth returns dates from 0, so add one */
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month < 10 ? '0' : ''}${ month }-${ day < 10 ? '0' : '' }${day}`
}
这里需要考虑的几点是:
Date#getMonth()
returns 0-indexed dates 范围为0-11。要匹配所需的日期格式,您应该添加1
,如图所示- 检查小于
10
的日期和月份值并添加前缀0
以填充这些数字以获得所需的格式
这可以添加到您现有的代码中,如下所示:
var startDate = new Date("2019-08-26"); //YYYY-MM-DD
var endDate = new Date("2019-09-25"); //YYYY-MM-DD
function formatDate(date) {
const year = date.getFullYear();
/* getMonth returns dates from 0, so add one */
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month < 10 ? '0' : ''}${ month }-${ day < 10 ? '0' : '' }${day}`
}
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
function shuffle(arra1) {
var ctr = arra1.length,
temp, index;
// While there are elements in the array
while (ctr > 0) {
// Pick a random index
index = Math.floor(Math.random() * ctr);
// Decrease ctr by 1
ctr--;
// And swap the last element with it
temp = arra1[ctr];
arra1[ctr] = arra1[index];
arra1[index] = temp;
}
/* Update this line */
return arra1.map(formatDate);
}
console.log(shuffle(dateArr));
var getDates = function(startDate, endDate) {
var dates = [],
currentDate = startDate,
addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
};
while (currentDate <= endDate) {
dates.push(currentDate);
currentDate = addDays.call(currentDate, 1);
}
return dates;
};
// Usage
var dates = getDates(new Date(2019, 10, 22),
new Date(2019, 11, 25));
dates.forEach(function(date) {
console.log(date);
});