momentJS's toDate() returns invalid Date - javascript

I am getting in following format from PHP:
"end_date":{"date":"2017-02-17 18:52:31.000000","timezone_type":3,"timezone":"UTC"}}]
at JS/AngularJS end I am doing following:
var end_date = Lease.period_ferme[idx].end_date
$scope.frame[idx].end_date = moment(end_date).toDate()
console.log('After');
console.log($scope.frame[idx].end_date); //invalid date

if you pass an Object to the Moment constructor, that object should have fields named year, month, etc. Your object does not, so Moment can't parse it and decides it's invalid.
As mentioned in the comment attached to your question, try creating a Moment object with just the date string:
$scope.frame[idx].end_date = moment(end_date.date).toDate();
or, since your JSON specifies UTC, try creating a Moment object using Moment.utc:
$scope.frame[idx].end_date = moment.utc(end_date.date).toDate();

Related

How to convert string into date?

in my application I want to show the last login of the user. From my backend I get this string: "lastLogin":"2022-02-22T06:02:53.585764600Z". In my frontend, I display it with:
<label class="lastVisitLabel">Last visit {{$store.state.user.lastLogin}}</label>
How can I format this string to a date type so I can use methods like .getHours() usw...
// Just pass string to new Date method
const customDate = new Date("2022-02-22T06:02:53.585764600Z");
// Test
console.log(customDate.getHours());
I already found the answer for my problem,
{{Date($store.state.user.lastLogin)}}
Just use this to cast the string inside the brackets
A possible solution is that you can pass the string date from the backend into a Date object. And only then you will be able to use Date methods.
or in your case
{{Date{$store.state.user.lastLogin}}
Please refer to the attached code as a reference.
//Value from DB
const strDate = "2022-02-22T06:02:53.585764600Z";
//Parse the date
const parsedDate = new Date(strDate);
document.querySelector("#display-date").textContent = parsedDate.getHours();
<h1 id="display-date"></h1>
MDN Date docs: Date
W3schools Date Objects

JSON.stringify returns wrong value for the Date Object

the below code returns one day earlier,
var myJSON = JSON.stringify(new Date("02/02/1997"));
alert(myJSON);
myJSON variables returns "1997-02-01T18:30:00.000Z"
Why its returning wrong value.
Here, what does the meaning of "T18:30:00.000Z"
Is there any other way of converts the Date object to the String.
Try this..
var myJSON = JSON.stringify(new Date("02/02/1997").toLocaleString());
alert(myJSON);
It is converting your Date object to UTC date.
You should convert Date object to String value using predefined methods of Date Object. Like:
JSON.stringify(new Date("02/02/1997").toLocaleString());
JSON.stringify(new Date("02/02/1997").toDateString()); // to get date portion
Recommend you take a look at moment.js. The framework provides a very nice API for:
Parse, validate, manipulate, and display dates in JavaScript.
Convert your date into the desired string format and then JSON.stringify.

How to get date object from moment.js after formatting it

Using typescript, I am formatting my date with moment.js like this.
function getCreatedDate(objContainingDate: any): Date {
// Following line does not work since it is returning string,
// I need formatted date object to return
return moment(objContainingDate.createdDate).format("L")
}
The format method returns a string, how to convert it back to date object ?
This might be a delayed response.But, I think it can help others who still needs an answer.
https://momentjs.com/guides/#/lib-concepts/internal-properties/
To retrieve a native Date object from Moment, use .toDate()
You can directly get the Date object from Moment.
Using the date object with moment clones it and the original object is left intact to continue to use. But to convert it back just pass the formatted moment string into a new date object.
var myDateObj = new Date(2011, 9, 16);
var now = moment(myDateObj);
#Now convert it back to date object
var newDateObj = new Date(now.format("YYYY-MM-DDTHH:mm:ssZ"));

Parse this value with moment doesn't work

I have a date value like this value.game_date = 2013-10-27 03:39:35 and I'm trying to parse it as follow:
moment().format(value.game_date, 'DD-MM-YYYY');
But I get this as result 29-10-2013 00:00:00 where I'm looking for this format: 29-10-10-29 without hour, what I'm doing wrong?
I think you have some typos or misinformation in your post regarding the output you're getting and what you're desiring.
Based on what appears to be a misunderstanding of moment, however, I am pretty sure that what you want is:
value.game_date = '2013-10-27 03:39:35';
var formatted_game_date = moment(value.game_date).format('DD-MM-YYYY');
// produces '27-10-2013'
moment() is a factory function which takes a date string and returns a moment instance. That moment instance then has various methods available, such as format() which takes a format string as the first param.
So your code is producing a moment instance representing current date/time (because you're not passing any params to moment()), then you ask .format() to return a string formatted using your date stamp as the formatter. Your date string doesn't have any of the things in it which format would parse and replace, so you just get back your date string.
The code I gave passes the date string to moment to produce the instance, then asks .format() for a formatted string using your desired format template.

Proper way to format date from database using javascript/jquery

I am calling my database which contains a datetime datatype. The date looks like this:
2005-05-23 16:06:00.000
I would like to display this in a table when a user selects a certain item from a list. I call my controller action and return Json of all the times and put them in a table. The problem is the date is completely wrong. What is displayed is this:
/Date(1255470180000)/
The date that is returned isn't even parsable (which I don't want to do anyway) so I can't even get the data if I wanted to. Any ideas?
The date you're getting back is serialized to a marker and a number of milliseconds since midnight 1st Jan 1970 (in UTC). If you isolate the numeric portion, convert it into a number, and feed it into the Date constructor you'll get an actual date to work with, which you can then format as you like.
var ticks, dt;
// Isolate the numeric portion of the value
ticks = /[0-9]+/.exec(json.dateValue)[0];
// Convert to a number
ticks = parseInt(ticks);
// Convert to a date
dt = new Date(ticks);
Alternately, if the JSON serializer on the server supports a "replacer" parameter as Crockford's and ECMAScript 5th edition's do, you could supply a replacer that formatted the date into a string server-side and handle it there, since you said you don't want to parse the date client-side (although the jQuery tag suggested to me maybe you did).
The other alternative is to return the formatted string from the controller action. You could even leave the timestamp and return a second field as "Formatted Timestamp" or something similar.
var listFromDb = ...
return new Json(listFromDb.Select(itemFromDb => new List { new
{ Date = itemFromDb.Date, FormattedDate = FormatDate(itemFromDb.Date), ...}
I ended up formatting the code in the controller action instead.
I just cast the datetime property to a string using .ToString() and got the desired results.
Thanks for the help though guys.

Categories