从Javascript中的YYYY-DD-MM字符串中提取日,月,年

时间:2019-01-25 10:40:09

标签: javascript

我正在寻找用JavaScript中的YYYY-DD-MM从字符串中提取日,月,年的最佳解决方案:

提取自:

2019-25-01

要反对:

{ day: 25, month: 01, year: 2019 }

什么是最好的方法。预先感谢!

7 个答案:

答案 0 :(得分:20)

您可以拆分,分解并返回新对象。

const getDate = string => (([year, day, month]) => ({ day, month, year }))(string.split('-'));

console.log(getDate('2019-25-01'));

答案 1 :(得分:4)

我将使用正则表达式来match每个数字序列,将匹配的字符串数组映射为数字,将其分解为变量,然后从中创建一个对象:

const [year, day, month] = '2019-25-01'
  .match(/\d+/g)
  .map(Number);
const obj = { day, month, year };
console.log(obj);

请注意,数字不能有前导零。如果您希望月份的前导零,请改用字符串(只需删除.map(Number))。

答案 2 :(得分:4)

这是一个非常简短,快速的解决方案,仅适用于该格式和ES6

function getJsonDate(text) {
  var {0: year, 1: day, 2: month } = text.split("-");
  return { day, month, year};
}
console.log(getJsonDate("2019-25-1"));

如果您需要将字段设置为数字,则可以添加地图,如下所示:

function toNumber(text) {
  text = text - 0;
  return isNaN(text) ? 0 : text;
}
function getJsonDate(text) {
  var {0: year, 1: day, 2: month } = text.split("-").map(toNumber);
  return { day, month, year};
}
console.log(getJsonDate("2019-25-1"));

答案 3 :(得分:1)

您可以split()去做

var value = "2019-25-01";
var year = value.substring(0,4);
var day = value.substring(5,7);
var month = value.substring(8,10);
var str = "{day:" + day + ",month:" + month + ",year:" + year + "}";
console.log(str);

答案 4 :(得分:1)

使用.split()

let date = "2019-25-01"
let dateArr = date.split('-')
let obj = {
  day: dateArr[1],
  month: dateArr[2],
  year: dateArr[0]
}
console.log(obj)

答案 5 :(得分:1)

对于类似JSON的结构

d="2019-25-01";
x=d.split("-");
json="{ day: "+x[1]+", month: "+x[2]+", year: "+x[0]+" }";
>>"{ day: 25, month: 01, year: 2019 }"

答案 6 :(得分:1)

这里您有一种方法不需要进行映射str -> array -> object,它将把string直接转换为object,也可以用于更广泛的日期时间。它基于可以在String::replace()

上使用的replacement函数

const dateStr1 = "2019-25-01";
const dateMap1 = ["year", "day", "month"];
const dateStr2 = "2019-25-01 17:07:56";
const dateMap2 = ["year", "day", "month", "hour", "minute", "second"];

const splitDate = (str, map) =>
{
    let obj = {}, i = 0;
    str.replace(/\d+/g, (match) => obj[[map[i++] || i - 1]] = match);

    return obj;
}

console.log(splitDate(dateStr1, dateMap1));
console.log(splitDate(dateStr2, dateMap2));

与日期格式严格相关的另一种方法可能是下一个:

const strDate = "2019-25-01";

const splitDate = (str) =>
{
    let [date, year, day, month] = str.match(/(\d+)-(\d+)-(\d+)/);
    return {year, month, day};
}

console.log(splitDate(strDate));