如何获取星期几和一年中的月份?

问题描述 投票:0回答:15

我对Javascript不太了解,我发现的其他问题都与日期操作有关,不仅仅是获取我需要的信息。

目标

我希望获得以下格式的日期:

印于 2011 年 1 月 27 日星期四 17:42:21

到目前为止,我得到了以下信息:

var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();

h = checkTime(h);
m = checkTime(m);
s = checkTime(s);

var prnDt = "Printed on Thursday, " + now.getDate() + " January " + now.getFullYear() + " at " + h + ":" + m + ":" s;

我现在需要知道如何获取星期几和一年中的月份(它们的名字)。

有没有一种简单的方法来实现它,或者我应该考虑使用数组,我可以简单地使用

now.getMonth()
now.getDay()
索引到正确的值?

javascript datetime dayofweek
15个回答
303
投票

是的,你需要数组。

const days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
const months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

var day = days[ now.getDay() ];
var month = months[ now.getMonth() ];

或者您可以使用 date.js 库。


编辑:

如果您要经常使用这些,您可能需要扩展

Date.prototype
以实现可访问性。

(function() {
    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
    
    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

    Date.prototype.getMonthName = function() {
        return months[ this.getMonth() ];
    };
    Date.prototype.getDayName = function() {
        return days[ this.getDay() ];
    };
})();

var now = new Date();

var day = now.getDayName();
var month = now.getMonthName();

94
投票

使用标准的 javascript Date 类。 不需要数组。不需要额外的库。

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

var options = {  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };
var prnDt = 'Printed on ' + new Date().toLocaleTimeString('en-us', options);

console.log(prnDt);


17
投票

我认为这是我找到的最好的解决方案

new Date(payload.value).toLocaleString("en", { weekday: "long" })

14
投票

您还可以做的一件事是扩展日期对象以返回工作日:

Date.prototype.getWeekDay = function() {
    var weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    return weekday[this.getDay()];
}

所以,只能调用date.getWeekDay();


9
投票

正如@L-Ray已经建议的那样,你也可以查看moment.js

样品

var today = moment();
var result = {
  day: today.format("dddd"),
  month: today.format("MMM")
}

document.write("<pre>" + JSON.stringify(result,0,4) + "</pre>");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>


9
投票

来自 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

toLocaleDateString() 方法返回一个字符串,其中包含该日期的日期部分的语言敏感表示形式。新的区域设置和选项参数允许应用程序指定应使用其格式约定的语言,并允许自定义函数的行为。在旧的实现中,忽略区域设置和选项参数,使用的区域设置和返回的字符串的形式完全依赖于实现。

长格式:

const options = { weekday: 'long' };
const date = new Date();
console.log(date.toLocaleDateString('en-US', options));

一个衬垫:

console.log(new Date().toLocaleDateString('en-US', { weekday: 'long' }));

注意:区域设置还有其他语言选项,但此处提供的是美国英语


6
投票
var GetWeekDays = function (format) {
    var weekDays = {};

    var curDate = new Date();
    for (var i = 0; i < 7; ++i) {
        weekDays[curDate.getDay()] = curDate.toLocaleDateString('ru-RU', {
            weekday: format ? format : 'short'
        });

        curDate.setDate(curDate.getDate() + 1);
    }

    return weekDays;
};

me.GetMonthNames = function (format) {
    var monthNames = {};

    var curDate = new Date();
    for (var i = 0; i < 12; ++i) {
        monthNames[curDate.getMonth()] = curDate.toLocaleDateString('ru-RU', {
            month: format ? format : 'long'
        });

        curDate.setMonth(curDate.getMonth() + 1);
    }

    return monthNames;
};

5
投票

不幸的是,JavaScript 中的

Date
对象仅以数字格式返回有关月份的信息。您可以做的更快的事情是创建一个月份数组(它们不应该经常更改!)并创建一个根据数字返回名称的函数。

类似这样的:

function getMonthNameByMonthNumber(mm) { 
   var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

   return months[mm]; 
}

您的代码因此变为:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;

3
投票

使用 http://phrogz.net/JS/FormatDateTime_JS.txt 你可以:

var now = new Date;
var prnDt = now.customFormat( "Printed on #DDDD#, #D# #MMMM# #YYYY# at #hhh#:#mm#:#ss#" );

2
投票

您可以查看 datejs 例如,它解析本地化日期输出。

在您的示例中,格式可能如下所示:

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 

2
投票
  function currentDate() {
      var monthNames = [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE",
                     "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ];
      var days = ['SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY'];                       
      var today = new Date();
      var dd   = today.getDate();
      var mm   = monthNames[today.getMonth()]; 
      var yyyy = today.getFullYear();
      var day  = days[today.getDay()];
      today = 'Date is :' + dd + '-' + mm + '-' + yyyy;
      document.write(today +"<br>");
      document.write('Day is : ' + day );
  }
  currentDate();

1
投票

这很简单。您可以在 toLocaleDateString() 中设置选项以仅显示工作日以获取名称。例如:

(new Date()).toLocaleDateString('en-US',{ weekday: 'long'}) 将仅返回星期几。并且 (new Date()).toLocaleDateString('en-US',{month: 'long'}) 将仅返回一年中的月份。


1
投票

如果一周从 1: '星期一',2: '星期二', 3: '星期三',4: '星期四', 5: '星期五',6: '星期六',7: 开始,我们可以使用下面的代码片段‘周日’。

let weekDays = {
  1: 'Monday',
  2: 'Tuesday', 
  3: 'Wednesday',
  4: 'Thursday',
  5: 'Friday',
  6: 'Saturday',
  7:'Sunday'};
return weekDays[dt];

0
投票
new Date().toUTCString()

可能足以满足您的目的。它将字符串格式化为:

Tue, 31 Dec 2024 23:59:59 GMT
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString


-9
投票

写下日期 =

<script> document.write(Date()); </script>

© www.soinside.com 2019 - 2024. All rights reserved.