admin管理员组

文章数量:1288167

I found and inconsistent result when using the JavaScript date.getMonth() and date.getUTCMonth(), but only with some dates. The following example demonstrates the problem:

<!DOCTYPE html>
<html>
<body onload="myFunction()">

<p id="demo">Click the button to display the month</p>

<script type="text/javascript">
function myFunction()
{
var d = new Date(2012, 8, 1);
var x = document.getElementById("demo");
x.innerHTML=d;
x.innerHTML+='<br/>result: ' + d.getMonth();
x.innerHTML+='<br/>result UTC: ' + d.getUTCMonth();

}
</script>

</body>
</html>

The output of this example is:

Sat Sep 01 2012 00:00:00 GMT+0100 (Hora de Verão de GMT)
result: 8
result UTC: 7

If i change the date to (2012, 2, 1) the output is:

Thu Mar 01 2012 00:00:00 GMT+0000 (Hora padrão de GMT)
result: 2
result UTC: 2

In the first example, getMonth returns 7 and getUTCMonth returns 8. In the second example, both returns the same value 2.

Does anyone already experiences this situation? I am from Portugal and i think that it has something to be with my GMT but i don't understand why this is happening, because the examples are running in same circumstances.

Thanks in advances

I found and inconsistent result when using the JavaScript date.getMonth() and date.getUTCMonth(), but only with some dates. The following example demonstrates the problem:

<!DOCTYPE html>
<html>
<body onload="myFunction()">

<p id="demo">Click the button to display the month</p>

<script type="text/javascript">
function myFunction()
{
var d = new Date(2012, 8, 1);
var x = document.getElementById("demo");
x.innerHTML=d;
x.innerHTML+='<br/>result: ' + d.getMonth();
x.innerHTML+='<br/>result UTC: ' + d.getUTCMonth();

}
</script>

</body>
</html>

The output of this example is:

Sat Sep 01 2012 00:00:00 GMT+0100 (Hora de Verão de GMT)
result: 8
result UTC: 7

If i change the date to (2012, 2, 1) the output is:

Thu Mar 01 2012 00:00:00 GMT+0000 (Hora padrão de GMT)
result: 2
result UTC: 2

In the first example, getMonth returns 7 and getUTCMonth returns 8. In the second example, both returns the same value 2.

Does anyone already experiences this situation? I am from Portugal and i think that it has something to be with my GMT but i don't understand why this is happening, because the examples are running in same circumstances.

Thanks in advances

Share Improve this question asked Aug 7, 2012 at 13:39 bruno.almeidabruno.almeida 2,8961 gold badge27 silver badges32 bronze badges 1
  • I got the answer: DATE-ONLY forms are interpreted as a UTC time and DATE-TIME forms are interpreted as local time. So, if you place the following string in a constructor: '2019-03-01' it creates a UTC-based date object, but if you pass '2019-03-01T14:48:00' with the time included, then a LOCAL time date object is created. – WebDev-SysAdmin Commented Oct 17, 2021 at 14:35
Add a ment  | 

4 Answers 4

Reset to default 2

You will see that, depending on YOUR TIMEZONE, the console logs may be different. I chose the first of the month '01' because it will be given a midnight default time '00:00:00', which will result in some timezones yielding February instead of March (you can get the full scoop here: https://developer.mozilla/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) :

let date1 = '2019-03-01'; // defaults to UTC
let date2 = '2019-03-01T14:48:00'; // LOCAL date/time


let dt1 = new Date(date1);
let dt2 = new Date(date2)


let month1 = dt1.getMonth();
let month2 = dt2.getMonth();

console.log("mon1: " + month1);
console.log("mon2: " + month2);

You will find that it is caused by DST difference.

Universal Time Zone date methods are used for working with UTC dates

Date returns month between 0 to 11 new Date(1976, 01 , 18) - Wed Feb 18 1976 00:00:00 GMT+0530 (India Standard Time)

*getUTCDate return same as getDate() but returns Date based on World Time Zone, same with month and year

new Date(1976, 01 , 18).getUTCDate() - 17

new Date(1976, 01 , 18).getDate() - 18

new Date(1976, 02 , 18).getUTCMonth() - 2

new Date(1976, 01 , 18).getMonth() - 1

new Date(1976, 01 , 18).getYear() - 76

new Date(1976, 01 , 18).getUTCFullYear() - 1976

new Date(1976, 01 , 18).getFullYear() - 1976

A Date in js is just a timestamp, meaning there is no timezone information in any Date instance. A date is an absolute timed event (in opposition to a wall clock time which is relative to your timezone).

So… when you print the date to the console, because there is no timezone information in the date object, it will use your browser's timezone to format the date.

This is embarrassing because if you provide the same date to 2 clients, one in US and the other one in EU and ask them the date's month, because both are using their own timezone, you might end up with different answers.

To prevent this, getUTCMonth(); will use a default timezone of UTC (+0) instead of the client's browser so that the answer will be consistent whatever the client's timezone.

本文标签: javascriptgetMonth getUTCMonth difference resultStack Overflow