JS中日期的日期名称


79

我需要显示从第三方获得的给定日期(例如“ 05/23/2014”)的日期名称。

我尝试使用Date,但只得到日期。

取得日期名称的正确方法是什么?


将其转换为日期,然后调用getDay()以获取日期数字(0-6,0 == Sunday),然后使用日期名称数组将数字映射到名称。
forgivenson

Answers:


115

您可以使用该Date.getDay()方法,该方法在星期日返回0,在星期六返回6。因此,您可以简单地使用日期名称的名称创建一个数组:

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var d = new Date(dateString);
var dayName = days[d.getDay()];

dateString是您从第三方API收到的字符串。

另外,如果您想要日期名称的前3个字母,则可以使用Date对象的内置toString方法:

var d = new Date(dateString);
var dayName = d.toString().split(' ')[0];

这将采用d.toString()输出中的第一个单词,即3个字母的天名称。


14
这可能不是最好的方法。标准的Javascript Date类提供了获取全名的方法。看看我的答案。
RWC

但是...“标准Javascript日期类”并非在所有浏览器中都适用。
埃尔南Eche

@ developer.mozilla.org / zh-CN / docs / Web / JavaScript / Reference /的@HernánEche…每个浏览器都支持Date就可以了。哪种浏览器不适合您?
Joeytje50 '19

@ Joeytje50的WebView程序,通过JavaFX,但确定,没有资格作为“浏览器”
埃尔南Eche

据我在网上可以找到的,@HernánEcheJavaFx是Java,而不是JavaScript。这些语言完全不同,因此您应该尝试查找与Java相关的东西。有关更多信息,请参见softwareguild.com/faq/difference-between-java-and-javascript(或Google上“ java与javascript之间的区别”下的其他任何结果)。
Joeytje50

164

Ahum,三年后...

为什么没人使用标准javascript Date类提供的方法(Callum Linington除外)?

参见https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

从日期获取日期名称

function getDayName(dateStr, locale)
{
    var date = new Date(dateStr);
    return date.toLocaleDateString(locale, { weekday: 'long' });        
}

var dateStr = '05/23/2014';
var day = getDayName(dateStr, "nl-NL"); // Gives back 'Vrijdag' which is Dutch for Friday.

获取数组中的所有工作日:

function getWeekDays(locale)
{
    var baseDate = new Date(Date.UTC(2017, 0, 2)); // just a Monday
    var weekDays = [];
    for(i = 0; i < 7; i++)
    {       
        weekDays.push(baseDate.toLocaleDateString(locale, { weekday: 'long' }));
        baseDate.setDate(baseDate.getDate() + 1);       
    }
    return weekDays;
}

var weekDays = getWeekDays('nl-NL'); // Gives back { 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag'} which are the days of the week in Dutch.

对于美国日期,请使用“ en-US”作为语言环境。


2
发布我的解决方案时,我根本不知道存在这种方法。确实,非常好的解决方案。直接提供国际化也很好。另外,很高兴学习新东西:P
Joeytje50 '17

1
某些人可能不使用它的可能原因是,根据您链接到的页面,它似乎与移动平台上的语言环境不完全兼容。
约翰(John

@John Jun:是的。当前,大多数移动设备上的浏览器都支持它。最值得注意的是,默认的Android浏览器没有。Android上的Chrome可以。(建议仍然在Android上使用Chrome。。讨论不同。)
RWC

在IE10中仅部分起作用。可以识别工作日,但是即使我指定了“ short”,也总是返回长名。“短”字样在Chrome浏览器中有效。IE10也无法识别“ month”关键字。当与“ long”一起使用时,它仅返回一个日期,例如“ 1970年1月1日星期四”,而Chrome浏览器会返回长月份名称。
Larphoid

嗯,让我改一下。经过一番摆弄之后,IE10似乎并没有理会您指定的任何内容,甚至没有区域设置。它始终根据操作系统区域设置返回带有长名称的完整日期。
Larphoid


15

使用Date.toLocaleString()方法:

new Date(dateString).toLocaleString('en-us', {weekday:'long'})

9
var days = [
    "Sunday",
    "Monday",
    "...", //etc
    "Saturday"
];

console.log(days[new Date().getDay()]);

简单,请阅读JavaScript手册中的Date对象

为了对日期做其他事情,例如从日期中获取可读的字符串,我使用:

var d = new Date();
d.toLocaleString();

如果您只想使用时间或日期,请使用:

d.toLocaleTimeString();
d.toLocaleDateString();

您可以通过以下方式解析日期:

var d = new Date(dateToParse);

要么

var d = Date.parse(dateToParse);

days [Date.now()。getDay()错误,因为Date.now()返回数字,而不是日期。
tronman '18

应该是days[new Date().getDay()]
Callum Linington '18

3

看看这个 :

var event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('ar-EG', options));
// expected output: الخميس، ٢٠ ديسمبر، ٢٠١٢

console.log(event.toLocaleDateString('ko-KR', options));
// expected output: 2012년 12월 20일 목요일

资料来源:Mozilla Doc


3

最简单的方法:

var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var dayName = days[new Date().getDay()];

1

你可以使用一个对象

var days = {
   'Mon': 'Monday',
   'etc..': 'etc..',
   'Fri': 'Friday'
}

var date = new Date().toString().split(' ')[0]; //get day abreviation first
console.log(days[date]);


1

如果有人提出更好的解决方案,我不喜欢过于复杂的解决方案,请告诉我们:)

any-name.js

var today = new Date().toLocaleDateString(undefined, {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric',
    weekday: 'long'
});
any-name.html
<script>
    document.write(today);
</script>

1

解决方案一

var today = new Date();

  var day = today.getDay();

  var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

  var dayname = days[day];

  document.write(dayname);

解决方案2

      var today = new Date();

  var day = today.getDay();

  switch(day){
    case 0:
    day = "Sunday";
    break;

    case 1:
    day = "Monday";
    break;

    case 2:
    day ="Tuesday";
    break;

    case 3:
    day = "Wednesday";
    break;

    case 4:
    day = "Thrusday";
    break;

    case 5:
    day = "Friday";
    break;

    case 6:
    day = "Saturday";
    break;
  }


document.write(day);

1

最短的一班轮

如果希望阵列从星期日开始,将UTC日期从6更改为5。

const getWeekDays = (locale) => [...Array(7).keys()].map((v)=>new Date(Date.UTC(1970, 0, 6+v)).toLocaleDateString(locale, { weekday: 'long' }));

console.log(getWeekDays('de-DE')); 


0

只需使用它:

function getWeekDayNames(format = 'short', locale = 'ru') {
  const names = [];
  const date = new Date('2020-05-24');
  let days = 7;

  while (days !== 0) {
    date.setDate(date.getDate() + 1);
    names.push(date.toLocaleDateString(locale, { weekday: format }));
    days--;
  }

  return names;
}

关于格式,您可以在这里阅读文档DateTimeFormat


-1

不是最好的方法,而是使用数组。这只是一种替代方法。

http://www.w3schools.com/jsref/jsref_getday.asp

var date = new Date();
var day = date.getDay();

在此发布之前,您应该真正使用google。

由于其他人发布了数组方法,因此我将向您展示使用switch语句的另一种方法。

switch(day) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;

    ... rest of cases

    default:
        // do something
        break;
}

上述工作,但是,数组是更好的选择。您也可以使用if()语句,但是switch语句要比if语句干净得多。


1
这将返回一个介于0到6之间的数值-而不是星期几。
Casey Falk 2014年

您可以从那里处理它,并将其转换为一天。
Nicolas

1
那是真实的。我只是想让您知道,这不能回答OP的书面问题。
Casey Falk 2014年

一个switch?为什么要用aswitch代替简单的Array?我的意思是,我猜想它是其他答案的替代方法……但是写作时间,蝙蝠侠……:/
Casey Falk 2014年

因为为什么要发布与2个人相同的东西?
Nicolas 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.