我正在从表单中捕获日期作为字符串,并将其传递给API-Request-URL。
日期字符串的格式为: 16 02 2019 但是API仅接受以下格式的日期字符串: 2019 02 16 。
基本上,在我的字符串中,我需要将前2个字符的位置更改为后4个字符的位置。
我已按照以下步骤解决了该问题:
let date = e.target.elements.date.value; // 16022019
const dateFirst = date.slice(0, 2);
const dateMiddle = date.slice(2, 4);
const dateLast = date.slice(4, 8);
date = `${dateLast}${dateMiddle}${dateFirst}`; // 20190216
但是我不确定这是否是一个好的解决方案。有没有更好的方法来达到相同的结果?
答案 0 :(得分:4)
我认为您的方法没有任何问题。如果您想知道替代方法,可以尝试一下。
这使用正则表达式捕获所需宽度的数字,然后捕获所需位置的数字。
let str = `16022019`
console.log(str.replace(/(\d{2})(\d{2})(\d{4})/,"$3$2$1"))
答案 1 :(得分:1)
如何映射位置:
[/*y*/ 4, 6, /*m*/ 2, /*d*/ 0].reduce((acc, p) => acc + date.slice(p, p + 2), "")
答案 2 :(得分:1)
使用子字符串
var a = '16022019';
console.log(a.substring(a.length - 4, a.length) + a.substring(2, 4) + a.substring(0, 2))
使用substr
var a = '16022019';
console.log(a.substr(a.length-4,4)+a.substr(2,2)+a.substr(0,2))
答案 3 :(得分:1)
这是处理日期的一种方式:
function yyyymmdd() {
var x = new Date();
var y = x.getFullYear().toString();
var m = (x.getMonth() + 1).toString();
var d = x.getDate().toString();
(d.length == 1) && (d = '0' + d);
(m.length == 1) && (m = '0' + m);
var yyyymmdd = y + m + d;
return yyyymmdd;
}
console.log(yyyymmdd("16022019")) // outputs 20190216
答案 4 :(得分:1)
您还可以通过使用Array#reverse和Array#join来执行类似的操作。
const data = "16022019"
const res = data.split(/(\d{2})(\d{2})(\d{4})/).reverse().join("");
console.log(res);
答案 5 :(得分:1)
您也可以使用 destructuring assignment 和 rest parameter 语法。
const str = `16022019`;
[d, d1, m, m1, ...year] = str.split("");
const dateStr = [...year,m,m1,d,d1].join("");
console.log(dateStr);