How to get the day of week and the month of the year?

JavascriptDatetimeDayofweek

Javascript Problem Overview


I don't know much about Javascript, and the other questions I found are related to operations on dates, not only getting the information as I need it.

Objective

I wish to get the date as below-formatted:

> Printed on Thursday, 27 January 2011 at 17:42:21

So far, I got the following:

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;

I now need to know how to get the day of week and the month of year (their names).

Is there a simple way to make it, or shall I consider using arrays where I would simply index to the right value using now.getMonth() and now.getDay()?

Javascript Solutions


Solution 1 - Javascript

Yes, you'll need arrays.

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() ];

Or you can use the date.js library.


EDIT:

If you're going to use these frequently, you may want to extend Date.prototype for accessibility.

(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();

Solution 2 - Javascript

Use the standard javascript Date class. No need for arrays. No need for extra libraries.

See 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);

Solution 3 - Javascript

One thing you can also do is Extend date object to return Weekday by:

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

so, you can only call date.getWeekDay();

Solution 4 - Javascript

As @L-Ray has already suggested, you can look into moment.js as well

Sample

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>

Solution 5 - Javascript

I think this's the best solution I found

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

Solution 6 - Javascript

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;
};

Solution 7 - Javascript

Unfortunately, Date object in javascript returns information about months only in numeric format. The faster thing you can do is to create an array of months (they are not supposed to change frequently!) and create a function which returns the name based on the number.

Something like this:

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

Your code therefore becomes:

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

Solution 8 - Javascript

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

The toLocaleDateString() method returns a string with a language sensitive representation of the date portion of this date. The new locales and options arguments let applications specify the language whose formatting conventions should be used and allow to customize the behavior of the function. In older implementations, which ignore the locales and options arguments, the locale used and the form of the string returned are entirely implementation dependent.

Long form:

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

One liner:

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

Note: there are other language options for locale, but the one presented here for for US English

Solution 9 - Javascript

Using http://phrogz.net/JS/FormatDateTime_JS.txt you can just:

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

Solution 10 - Javascript

You can look at datejs which parses the localized date output for example.

The formatting may look like this, in your example:

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

Solution 11 - Javascript

  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();

Solution 12 - Javascript

That's simple. You can set option to display only week days in toLocaleDateString() to get the names. For example:

(new Date()).toLocaleDateString('en-US',{ weekday: 'long'}) will return only the day of the week. And (new Date()).toLocaleDateString('en-US',{ month: 'long'}) will return only the month of the year.

Solution 13 - Javascript

We can use the below snippet if the week starts from 1: 'Monday',2: 'Tuesday', 3: 'Wednesday',4: 'Thursday', 5: 'Friday',6: 'Saturday',7:'Sunday'.

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

Solution 14 - Javascript

new Date().toUTCString()

might be good enough for your purposes. It formats the string as: Tue, 31 Dec 2024 23:59:59 GMT https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString

Solution 15 - Javascript

Write the Date = <script> document.write(Date()); </script>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWill MarcouillerView Question on Stackoverflow
Solution 1 - Javascriptuser113716View Answer on Stackoverflow
Solution 2 - JavascriptRWCView Answer on Stackoverflow
Solution 3 - JavascriptPritam NarkhedeView Answer on Stackoverflow
Solution 4 - JavascriptRajeshView Answer on Stackoverflow
Solution 5 - JavascriptMohammad FaredView Answer on Stackoverflow
Solution 6 - JavascriptP.S.S.View Answer on Stackoverflow
Solution 7 - Javascriptlucke84View Answer on Stackoverflow
Solution 8 - JavascriptcambistView Answer on Stackoverflow
Solution 9 - JavascriptPhrogzView Answer on Stackoverflow
Solution 10 - JavascriptDanView Answer on Stackoverflow
Solution 11 - JavascriptAnil KumarView Answer on Stackoverflow
Solution 12 - JavascriptAntonio JhaView Answer on Stackoverflow
Solution 13 - JavascriptBipasha DasView Answer on Stackoverflow
Solution 14 - JavascriptStefan ZhelyazkovView Answer on Stackoverflow
Solution 15 - JavascriptAna GaunaView Answer on Stackoverflow