在不更改对象结构的情况下格式化嵌套日期

Posted

技术标签:

【中文标题】在不更改对象结构的情况下格式化嵌套日期【英文标题】:Format nested dates without changing object structure 【发布时间】:2021-12-10 04:50:30 【问题描述】:

我正在为此寻找一个好的清洁解决方案。我有一个可以输入 Date | 日期的对象空 |字符串:

someObject: 
    array: [
       
          dateOne: '2021-10-21T22:00:00.000Z',
          dateTwo: '2021-10-21T22:00:00.000Z',
       
    ];
 ;

我正在寻找一个很好的解决方案,可以在不改变其结构的情况下将日期格式应用于上述内容。我知道下面的例子不起作用,它只是一个适用于对象中嵌套日期的例子,但可能是这些方面的东西。 示例如下:

someObject: Object.entries(values.someObject).reduce((acc, [a, b]) => 
                  if (b instanceof Date) 
                     return 
                        ...acc,
                        [a]: moment(b).format('YYYY-MM-DD'),
                     ;
                  
                  return acc;
               , values.someObject),

预期输出:

    someObject: 
    array: [
       
          dateOne: '2021-10-21',
          dateTwo: '2021-10-21',
       
    ];
 ;

TIA

【问题讨论】:

【参考方案1】:

您可以在此处使用split 和map

const obj = 
  someObject: 
    array: [
      
        dateOne: "2021-10-21T22:00:00.000Z",
        dateTwo: "2021-10-21T22:00:00.000Z",
      ,
    ],
  ,
;

function getFormattedDate(date) 
  return date.split("T")[0];


obj.someObject.array = obj.someObject.array.map(( dateOne, dateTwo ) => (
  dateOne: getFormattedDate(dateOne),
  dateTwo: getFormattedDate(dateTwo),
));

console.log(obj);
/* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */

.as-console-wrapper 
  max-height: 100% !important;
  top: 0;
/* Or in the context mentioned above */

someObject: Object.entries(
              values.someObject
           ).reduce((acc, [a, b]) => 
              if (b[0].dateOne instanceof Date) 
                 return 
                    ...acc,
                    [b]: a.map(( dateOne, dateTwo ) => (
                       dateOne: moment(dateOne).format('YYYY-MM-DD'),
                       dateTwo: moment(dateTwo).format('YYYY-MM-DD'),
                    )),
                 ;
              
              return acc;
           , values.someObject),

【讨论】:

非常感谢,我在上面的答案中添加了一个编辑,以便将您的逻辑添加到问题的上下文中。谢谢

以上是关于在不更改对象结构的情况下格式化嵌套日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在不设置区域设置的情况下设置 NLS 日期格式

在不知道结构的情况下解组嵌套的 json

如何在不知道格式的情况下将字符串转换为日期?

在不知道 JSON 格式的情况下用 Java 解析 JSON

如何在不更改格式的情况下返回 DateTime

如何在不创建临时对象的情况下迭代嵌套的 TreeMap