JavaScript全名星期几和月份(或如何根据客户端语言环境获取日期名称)

4

(new Date()).toString() 返回的字符串大致如下:

"Tue Nov 22 2016 14:14:51 GMT-0800 (Pacific Standard Time)"

是否有内置的方法/构造函数可用,不会缩写星期几和/或月份?换句话说,JS是否支持这种情况:

"Tuesday November 22 2016 14:14:51 GMT-0800 (Pacific Standard Time)"

我提出这个问题的原因是因为我正在寻找一种懒惰/巧妙的方法,可以让我们以客户端语言获取星期和月份名称。


这应该指引你朝着正确的方向前进:https://dev59.com/jmLVa4cB1Zd3GeqPvmDo#10032685 - James Hill
我知道如何自己实现它,但我真正想要实现的是以客户端语言获取月份/日期全名的hacky/lazy方法。 - Jed
可能是在JavaScript中格式化日期的文档在哪里?的重复问题。 - Heretic Monkey
2个回答

3
如果您不需要支持旧版浏览器(低于IE 11),您可以使用toLocalDateString()
示例:

console.log(
  new Date().toLocaleDateString('en-US', {
    weekday: 'long',
    month: 'long',
    day: 'numeric',
    year: 'numeric',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    timeZoneName: 'short'
  })
);

但是moment.js更加方便。
查看更多信息,请参阅MDN Date.prototype.toLocaleDateString()

0

正如Josa的回答所暗示的那样,对于大多数现代浏览器,可以获取星期和月份的全名。

我使用.toLocaleDateString()成功地从Chrome和IE11中提取了客户端语言的星期和月份的全名(在Safari 9中不起作用)。

扩展从浏览器获取全名的想法,我很好奇是否可以获取与客户端区域设置匹配的语言中的星期和月份名称。以下实验表明这是可能的(尽管不可靠)。

实验/娱乐:

以下函数将返回一个对象,其中包括特定日期的星期和月份的名称以及特定区域代码的语言。

Fiddle

function getWeekdayAndMonthNamesByLocaleCode(localeCode, date) {
  var Names = {
    Weekday: "",
    Month: ""
  };

  if (!(date instanceof Date && !isNaN(date.valueOf()))) {
    date = new Date();
  }

  if (localeCode == null || localeCode.length < 2) {
    localeCode = navigator.language;
  }

  Names.Month = date.toLocaleDateString(localeCode, {
    month: 'long',
  });

  Names.Weekday = date.toLocaleDateString(localeCode, {
    weekday: 'long'
  });

  return Names;
}

我还没有测试这个函数的浏览器兼容性,而且我肯定不会依赖它来处理所有语言,但我认为它足够有趣,可以在这里发布供其他人尝试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接