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

IT技术 javascript datetime dayofweek
2021-01-28 14:26:31

我对 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()and索引到正确的值now.getDay()

6个回答

是的,你需要数组。

var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var 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();
我刚刚这样做了,但不得不使用星期一作为数组中的第一个元素,而不是星期日。尽管如此,效果很好。
2021-03-15 14:26:31
@Will:不客气。仅供参考,如果您要经常这样做,您可以轻松地将功能原型化到Date对象中。一会我来更新。
2021-03-16 14:26:31
本地化您的数据,无需仅使用一种语言的数组!selectedLocale = 'en-us'; selectedDate.toLocaleString(selectedLocale, { 月: "long" });
2021-03-22 14:26:31
不不不不。只需使用标准的 javascript Date 类。不需要数组或额外的库。看我的回答:stackoverflow.com/a/50293232/760777
2021-03-29 14:26:31

使用标准的 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);

这只是为我显示时间。
2021-03-16 14:26:31
@RWC 这很好,但是我如何设法只获得工作日而没有其余的日期部分?IE 我想要saturday而不是saturday, 9th february 2019.
2021-03-31 14:26:31
绝对是最好的方法。
2021-04-03 14:26:31
@Vladimir Firefox 有问题,总是显示时间,然后: new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
2021-04-08 14:26:31
@Valdimir Nul: var prnDt = 'Printed on ' + new Date().toLocaleDateString('en-us', { weekday: 'long' }); 控制台日志(prnDt);
2021-04-11 14:26:31

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

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

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

作为@ L-雷已经建议,你可以看看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>

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;
};
ru-RU 将是 en-US(美式英语)或 en-GB(英式英语)。
2021-03-23 14:26:31