50

Okay, say JSON parse string UTC date as below:

2012-11-29 17:00:34 UTC

Now if I want to convert this UTC date to my local time, how can I do this?

How do I format it to something else like yyyy-MM-dd HH:mm:ss z?

This date.toString('yyyy-MM-dd HH:mm:ss z'); never work out :/

3
  • 3
    new Date("2012-11-29 17:00:34 UTC") will be in the local time of the client who is using the page Commented Nov 29, 2012 at 9:05
  • You could split it into array using spaces or the symbols. Suppose you do .split(" ") and array with with date and time and "utc" will be formed. then split it again like this .split("-") and split the time like this .split(":") and so on. Commented Dec 20, 2017 at 16:19
  • Just for anyone googling here. It's worth remembering that in MYSQL it's incredibly easy to absolutely perfectly convert to any time zone (and that includes perfectly caring for daylight savings times). Since almost all data comes from mysql on the server, it's worth bearing this in mind. Commented Oct 21, 2020 at 14:18

11 Answers 11

56

Try:

var date = new Date('2012-11-29 17:00:34 UTC');
date.toString();
Sign up to request clarification or add additional context in comments.

6 Comments

well, I tried out IE and Firefox, they are all NAN! Invalid Date?
using the date.js library this works for the date format yyyy-MM-dd HH:mm:ss
2012/11/29 <--try this
This will only work with chrome browser, this will not work in mozilla firefox and IE11. do you have any solution for all other browsers?
seems silly that there isnt a method on the Date prototype to return a date object in the local time instead of GMT/UTC
|
42
var offset = new Date().getTimezoneOffset();

offset will be the interval in minutes from Local time to UTC. To get Local time from a UTC date, you would then subtract the minutes from your date.

utc_date.setMinutes(utc_date.getMinutes() - offset);

8 Comments

I think that's supposed to be subtract the offset, not add the offset.
+ is appropriate because if the time zone is behind 1 hour, the value returned will be -60.
@OnResolve Surabhi is correct with using +. When using date.getTimezoneOffset, "a negative return value from getTimezoneOffset() indicates that the current location is ahead of UTC, while a positive value indicates that the location is behind UTC." (Tech Republic).
At least in chrome this is false. Even negative time zones return as a positive number.
@Surabhi @WebWanderer that explanation shows why using + here is incorrect. The value returned from getTimezoneOffset() is the value you need to add to a local time to get to UTC. So if you have want to go from UTC to local time, the action needs to be -. Basically, this answer does the opposite of the request, converting from local time to utc.
|
5

Here is another option that outputs mm/dd/yy using toLocaleString():

const date = new Date('2012-11-29 17:00:34 UTC');
date.toLocaleString();
//output 11/29/2012

1 Comment

This one is my favorite. To expand on it a bit, toLocaleString will use the local timezone, but you can also feed it options to get different timezones or display formats. See developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… for details.
2

To format your date try the following function:

var d = new Date();
var fromatted = d.toLocaleFormat("%d.%m.%Y %H:%M (%a)");

But the downside of this is, that it's a non-standard function, which is not working in Chrome, but working in FF (afaik).

Chris

Comments

1

The solutions above are right but might crash in FireFox and Safari! and that's what webility.js is trying to solve. Check the toUTC function, it works on most of the main browers and it returns the time in ISO format

Comments

1

You could take a look at date-and-time api for easily date manipulation.

let now = date.format(new Date(), 'YYYY-MM-DD HH:mm:ss', true);
console.log(now);
<script src="https://cdn.jsdelivr.net/npm/date-and-time/date-and-time.min.js"></script>

Comments

1
// d = "2021-09-23T15:51:48.31"

console.log(new Date(d + "z").toLocaleDateString());  // gives 9/23/2021

console.log(new Date(d + "z").toLocaleString()); // gives 9/23/2021, 10:51:48 AM
console.log(new Date(d + "z").toLocaleTimeString()); // gives 10:51:48 AM

Comments

0

This should work

var date = new Date('2012-11-29 17:00:34 UTC');
date.toString()

1 Comment

Nope! Not in Safari.
0

This works for both Chrome and Firefox.
Not tested on other browsers.

const convertToLocalTime = (dateTime, notStanderdFormat = true) => {
  if (dateTime !== null && dateTime !== undefined) {
    if (notStanderdFormat) {
      // works for 2021-02-21 04:01:19
      // convert to 2021-02-21T04:01:19.000000Z format before convert to local time
      const splited = dateTime.split(" ");
      let convertedDateTime = `${splited[0]}T${splited[1]}.000000Z`;
      const date = new Date(convertedDateTime);
      return date.toString();
    } else {
      // works for 2021-02-20T17:52:45.000000Z or  1613639329186
      const date = new Date(dateTime);
      return date.toString();
    }
  } else {
    return "Unknown";
  }
};

// TEST

console.log(convertToLocalTime('2012-11-29 17:00:34 UTC'));

Comments

0

It converts UTC ISO Date to local ISO date format. ("2011-10-05T14:48:00.000Z") using basic native JS method.

convertTimeZoneUTCToLocal(date: string | number): string {
const startTime = new Date(date);
return new Date(startTime.toString().split('GMT')[0] + ' UTC').toISOString();}

You can also use moment.js library to convert UTC time to local with below method.

convertTimeZoneUTCToLocal(date: string | number): string {
return moment.utc(date).local().format('YYYY-MM-DDTHH:mm:ss.SSS');

  function convertTimeZoneUTCToLocal(date) {
    const startTime = new Date(date);
    return new Date(startTime.toString().split('GMT')[0] + ' UTC').toISOString();
  }
  
  function loadDate(date){
    document.getElementById("outputDate").innerHTML = convertTimeZoneUTCToLocal(date);
  }
<html>
<head>
<script>

</script>
</head>

<body onload="loadDate('2024-08-23T07:33:51.242Z');">
<div> Input Date : 2024-08-23T07:33:51.242Z </div>
<div> Output Date: <span id="outputDate"></span></div>
</body>
</html>

}

Comments

-8
/*
 * convert server time to local time
 *  simbu
*/
function convertTime(serverdate) {
    var date = new Date(serverdate);
    // convert to utc time
    var toutc = date.toUTCString();
    //convert to local time
    var locdat = new Date(toutc + " UTC");
    return locdat;
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.