【问题标题】:javascript - how to get date format from string datejavascript - 如何从字符串日期获取日期格式
【发布时间】:2021-09-01 11:49:20
【问题描述】:

如何从已经格式化的日期(例如:1/9/2021)中获取日期格式(例如:DD/MM/YYYY)。我也能以某种方式实现不交换美国日期而不是美国日期(DD/MM/YYYYMM/DD/YYYY)。

我正在使用 Angular 项目(如果有 Angular 解决方案)

【问题讨论】:

  • 你不能,这就是为什么new Date('31/08/2021') 在大多数(全部?)实现中会返回一个无效的日期。解析时间戳的唯一可靠方法是事先知道格式。

标签: javascript angular date format


【解决方案1】:

您可以使用 moment.js 来解析日期,例如:

import moment from "moment";

const newDate = moment("1/9/2021", "MM/DD/YYYY").format("DD/MM/YYYY");
// newDate = 09/01/2021

【讨论】:

  • 我需要从已经格式化的日期字符串中获取格式。我没有格式化日期的问题。我有日期字符串,看起来像 1/9/2021,我需要获取已使用的格式类型,因此结果将是 DD/MM/YYYY
  • 这个格式化的日期是从哪里来的?
  • 我需要根据用户的本地设置获取格式(如果他的系统使用DD/MM/YYYYMM/DD/YYYY)。当我发现他的系统正在使用DD/MM/YYYY 时,我按照我收到的格式格式化给定的日期。
【解决方案2】:

简短的回答是,即使您有权访问它们,您也无法根据系统设置可靠地确定用户输入日期字符串的格式,因为用户可能以不同的格式输入值。例如。在英国,通常使用日/月/年,但如果您查看 The Times newspaper 上的日期,您会看到类似“2021 年 9 月 5 日星期日”的内容。

这是使用日期选择器的原因之一,但是许多用户仍然喜欢手动输入日期,并且经常发现日期选择器很烦人。

无论如何,确定Intl.DateTimeFormat 为默认系统语言生成的本地化格式似乎有点有趣。这当然是完全不可靠的,无论如何。 :-)

之所以有效,是因为formatToParts 按与语言关联的顺序返回数组中的部分以及分隔符。

function getDateFormat(lang) {
  let d = new Date(2021,0,20);      
  let format = new Intl.DateTimeFormat(lang,{
    year: 'numeric',
    month: 'numeric',
    day: 'numeric'
  }).formatToParts(d).reduce((acc,part) => {
    acc += part.type == 'literal'? part.value : part.type;
    return acc;
  }, '');
  
  return format;
}

['default',
 'en-GB',
 'en-US',
 'en-CA',
 'nl-BX',
 'ar'].forEach(lang => {
   let langDefault = lang == 'default'? new Intl.DateTimeFormat('default').resolvedOptions().locale : null;
   console.log('Lang ' + lang + (langDefault? ' (' + langDefault + ')':'') +
     ' format ' + getDateFormat(lang) + '.');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多