【问题标题】:Convert a string in date (so formatted: month day, year hh:mm:ss)转换日期中的字符串(格式为:月日,年hh:mm:ss)
【发布时间】:2021-08-14 13:35:17
【问题描述】:

我知道有很多关于日期格式的问题,但我遇到了转换问题。
我有一个这样格式化的字符串:ma​​g 11, 2021 2:31:00 pm(“mag”是意大利语中 May 的缩写)。
我想将其转换为日期,以便将其更改为 DD/MM/YYYY HH:MM:ss 格式(在本例中为“11/05/2021 14:31强>”)。
我尝试使用 new Date 或 Date.parse 函数,但在控制台中它返回错误“日期无效”。
这是我尝试过的:

let a = "mag 11, 2021 2:31:00 pm";
let b = new Date(a);
console.log(b);
console output -----> Invalid Date

let a = "mag 11, 2021 2:31:00 pm";
let b = Date.parse(a);
console.log(b);
console output -----> NaN

有什么想法吗?谢谢

【问题讨论】:

  • 请向我们展示您的尝试。
  • 刚刚编辑了帖子
  • 帮自己一个忙,并在您使用日期字符串时本地化它。因此,如果您曾经本地化页面,您不必担心。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 您需要的所有数据都在源时间戳中,您只需将月份名称转换为数字并根据需要组织和格式化部分。无需将其解析为日期(尽管一旦将部分作为数字,这很简单)。

标签: javascript date formatdatetime


【解决方案1】:

这个问题之前已经回答过很多次了,下面是针对这个具体案例的。

不需要 Date 对象,时间戳可以拆分为多个部分,月份名称转换为数字,然后重新格式化部分,例如

/*
mag 11, 2021 2:31:00 pm => DD/MM/YYYY HH:MM:ss 
e.g. 11/05/2021 14:31
*/
function reformatDate(date) {
  let z = n => ('0'+n).slice(-2);
  let months = [,'gen','feb','mar','apr','mag','giu',
                 'lug','ago','set','ott','nov','dic'];
  let [M,D,Y,h,m,s,ap] = date.toLowerCase().split(/\W+/);
  h = h%12 + (ap == 'am'? 0 : 12);
  M = months.indexOf(M);
  return `${z(D)}/${z(M)}/${Y} ${z(h)}:${m}`;
}

console.log(reformatDate('mag 11, 2021 2:31:00 pm'));

在 OP 中,格式标记包括秒,但示例中没有。如果需要,在上面的输出中添加秒应该很容易。

上面可以修改为基于特定语言构建月份名称数组,但是也需要将要使用的语言传递给函数。

如果使用库来解析字符串,必须为解析器指定语言和格式(例如date-fns允许设置解析和格式语言),然后是输出的语言和格式。因此,除非需要进行其他日期操作,否则库可能比它的价值更麻烦。

【讨论】:

    【解决方案2】:
    let now = new Date();
    
    var dateString = moment(now).format('YYYY-MM-DD');
    console.log(dateString) // Output: 2020-07-21
    
    var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:MM:SS');
    console.log(dateStringWithTime) // Output: 2020-07-21 07:24:06
    

    您可以查看here 了解 JavaScript 的 dateTime 的所有详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2011-05-11
      • 2021-04-12
      相关资源
      最近更新 更多