how can I format a date from a standard JS date object, which has come from the server and is fed into React via Redux through a REST api, which has an initial output of:
2016-05-16T13:07:00.000Z
Into a different format? So it is listed as DD MM YYYY
?
Can I do this in the Reducer of Action by manipulating the request result, or the payload:
import { FETCH_BOOKS, FETCH_BOOK } from '../actions';
const INITIAL_STATE = { books: [], book: null };
export default function(state = INITIAL_STATE, action) {
switch(action.type) {
case FETCH_BOOK:
return { ...state, book: action.payload.data };
case FETCH_BOOKS:
return { ...state, books: action.payload.data };
}
return state;
}
With action:
export function fetchBooks() {
const request = axios.get('/api/books');
return {
type: FETCH_BOOKS,
payload: request
}
}
fetchBooks()
is called in the componentWillMount()
method of the Books React component:
componentWillMount() {
this.props.fetchBooks();
}
The api returns the following structured JSON:
[{_id:0,date:2016-05-16T13:07:00.000Z,title:Eloquent JavaScript,description:Learn JavaScript}]
Update
Thank you very much Nicole and nrabinowitz - I have implemented the following changes... in the action creators
function transformDateFormat(json) {
const book = {
...json,
id: json.data._id,
// date: new Date(moment(json.data.date).format('yyyy-MM-dd'))
date: new Date(json.data.date)
}
console.log(book);
return book;
}
export function fetchBook(id) {
const request = axios.get(`/api/books/${id}`)
.then(transformDateFormat);
return {
type: FETCH_BOOK,
payload: request
}
};
I am logging the book object in the transform date function, and it is adding id
and date
to the root of the object, but the structure of the json actually needs to be book.data.id
and book.data.date
. I'm not sure how to create the correct structure within the transformDate function to return to the action creator.
This is the book object from the transform date function console log:
Object {data: Object, status: 200, statusText: OK, headers: Object, config: Object…}
config: Object
data: Object
__v:0
_id: 5749f1e0c373602b0e000001
date: 2016-05-28T00:00:00.000Z
name:Eloquent JavaScript
__proto__:Object
date: Sat May 28 2016 01:00:00 GMT+0100 (BST)
headers: Object
id: 5749f1e0c373602b0e000001
request: XMLHttpRequest
status: 200
statusText: OK
__proto__: Object
My function needs to place the id and date inside the data object. (The date is just standard date format as something is wrong with my implementation of moment (date: new Date(moment(json.data.date).format('yyyy-MM-dd'))
returns Invalid date
).
Thanks again for all your help - really appreciated.