Function like $.datepicker.formatDate for formatting time? - javascript

With $.datepicker.formatDate I can only format a date, meaning if I pass in a Date object, I can only get the date part of it formatted but not the time part.
Is there any equivalent function which allows the time part to also be formatted/parsed, preferably in the same syntax?
I'm using the following datetime plugin:
https://github.com/eternicode/bootstrap-datepicker
But it doesn't seem to have an equivalent formatDate function that I can use.

The datepicker's formatDate() method does not have any option to format time, for that look at a datetime library like moment.js
Ex
var date = new Date();
var df = moment(date).format('MMMM Do YYYY, h:mm:ss a');
alert(df)
and
var d = moment('2013-09-11 14:44:03', 'YYYY-MM-DD HH:mm:ss');
console.log(d.format('M/D/YYYY h:m A'))
Demo: Fiddle

Related

Format Date in Google App Script to YYYY-MM-DD

I'm trying to format the date in Google App Script and then store it into the Google Sheet. Everything is working fine but the problem is source date has no specific format, dates may come in different formats like DD-MM-YYYY, MM-DD-YYYY, YYYY-MM-DD or date can also come with time and then I've to convert it into YYYY-MM-DD format and then save in google sheet.
I've tried to convert to covert using the below codes:
var date = new Date("01-15-2022").toISOString().split('T')[0] // MM/dd/yyyy
Logger.log(date);
this code works only if the source date has in a format like MM/dd/yyyy and yyyy/MM/dd only if the date is in a format like dd/MM/yyyy then codes does not work.
I want a method that converts all the date formats in a single format like yyyy/MM/dd
I got a little bad news for you. There is no way to distinguish algorithmically between 01-02-2022 (Feb 1, 2022) and 01-02-2022 (Jan 2, 2022). So technically this source data is the infamous 'garbage in'.
Somehow I managed to find an alternative option to achieve this using Moment Js Library below is the solution:
function myFunction() {
let formats = ["DD/MM/YYYY", "MM/DD/YYYY", "YYYY/MM/DD", "DD/MM/YYYY hh:mm:ss", "DD/MM/YYYY hh:mm:ss A", "MM/DD/YYYY hh:mm:ss A", "YYYY/MM/DD hh:mm:ss A"]
Logger.log(convertDate("5/1/2022 12:00:00 PM", formats));
}
function convertDate(date, formats){
eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js').getContentText());
let dateMomentObject = moment(date, formats);
let dateObject = dateMomentObject.toDate();
let dateStr = moment(dateObject).format('YYYY-MM-DD');
return dateStr;
}

How to convert string date to specific format?

I am trying to get date from string in specific format like:
const format = 'MM/dd/yyyy HH:mm';
const dt = "2021-03-11T22:00:00.000Z"; // expecting "03/11/2021 22:00"
console.log(moment(dt).format(format)); // but getting "03/Th/yyyy 23:00"
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
I tried js date, moment, luxon and I don't understand how to make this :(
I suspect that 000Z made problem but this is date I get.
The difference between Moment.js and Luxon is the case of the format keys. Please review the key/token tables.
Moment.js / String + Format
Luxon / Table of tokens
Note: Moment.js has been deprecated in favor of the team's newer library Luxon and other ECMA Script standards that are being introduced in ECMA-402. If you are considering using Moment.js now, just switch over to Luxon.
If you are using Luxon, you can call .toUTC() right before you format the date. Make sure your day of month (dd) and year (yyyy) format keys are lower-case.
const DateTime = luxon.DateTime;
const
format = 'MM/dd/yyyy HH:mm',
dt = "2021-03-11T22:00:00.000Z";
console.log(DateTime.fromISO(dt).toUTC().toFormat(format)); // 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.26.0/luxon.min.js"></script>
If you are using Moment.js, you can call .utc() right before you format the date. Make sure your day of month (DD) and year (YYYY) format keys are upper-case.
const
format = 'MM/DD/YYYY HH:mm',
dt = "2021-03-11T22:00:00.000Z";
console.log(moment(dt).utc().format(format)); // 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Your format string is wrong, it should be: 'MM/DD/YYYY HH:mm'.
Then, if your date comes with ':000Z', you should remove it with the substring() method.
Working code:
const format = 'MM/DD/YYYY HH:mm';
const dateString = "2021-03-11T22:00:00:000Z";
const date = dateString.substring(0, dateString.length - 5);
console.log(moment(date).format(format)); // prints 03/11/2021 22:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
You need to use YYYY instead of yyyy and DD instead of dd to get the expected result.
By the way, I suggest using another library than Moment, like dayjs for instance.

Invalid Date moment.js using Iso yyyy-MM-dd HH:mm:ss

I have a date in the format yyyy-MM-dd HH:mm:ss that I am using to create moments for x axes values in chart.js
I get invalid date when I am newing up an instance of the moment.js class
$.each(unique, function (index, value) {
var momentDate = moment(value, "DD MMM YY HH:mm:ss");
momentsArray.push(momentDate);
});
I have read the documentation and I believe I am following the right ISO format for creating moment.js object. What I am doing wrong ?
According to your date value "2020-10-19 15:50:20", your format string should be "YYYY-MM-DD HH:mm:ss"

Processing localised date to convert it to local date/time using moment.js

I am getting translated UTC date from the backend and need to convert the date to localised local time format before displaying on the screen.
I have been using,
moment.locale(currentLocale); //Here currentLocale is the user's locale.
localtime = moment.utc(inputDate).toDate(); // inputDate = 2017年11月01日 AM10:42 (GMT)
moment(localtime).format(formatType); //formatType = "MMMM Do YYYY, h:mm A"
This works fine when the date is in english but not when we get translated date.
Is there any way we can process translated date to convert it to locale date and time and if possible translate digits too.
You should give the parser the format of the string you're parsing. You must be ignoring the error you're getting.
var inputDate = 'inputDate = 2017年11月01日 AM10:42 (GMT)'
var parseFormat = 'YYYY MM DD Ah:mm';
var printFormat = 'MMMM Do YYYY, h:mm A';
var d = moment.utc(inputDate, parseFormat).toDate();
console.log('Local: ' + moment(d).format(printFormat));
console.log('UTC : ' + moment.utc(d).format(printFormat));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>
The technique of parsing a string to a moment object, then creating an ECMAScript Date just to parse it back into a moment.utc object is weird to me. There doesn't seem to be a way of parsing a string as UTC without then setting the output offset to UTC too.

Format datetime to DD-MMM-YYY HH:mm:ss using moment.js

I have date in this format
2017-01-09T18:30:00.000Z
I am using moment.js and I am trying to convert it into DD-MMM-YYY HH:mm:ss --> 09-Jan-2017 18:30:00
I have tried this method
dateTime = moment("2017-01-09T18:30:00.000Z").format("DD-MMM-YYYY HH:mm:ss");
But I got output like this 9/1/2017 0:00
What I miss?
The reason you're getting 00:00 is because moment converts the date object to your timezone. In order to remove this and format the date without the timezone, use moment.utc().
Update your fiddle to this:
var dateTime = moment.utc("2017-01-09T18:30:00.000Z").format("DD-MMM-YYYY HH:mm:ss");
document.getElementById('output').innerText = dateTime;
and it will work, outputting: 09-Jan-2017 18:30:00
Try using:
dateTime = moment("2017-01-09T18:30:00.000Z").format("DD-MMM-YYYY HH:mm:ss"); // note the extra Y in YYYY
console.log(dateTime);
// => 10-Jan-2017 05:30:00
For the most part it looks like what you are doing is right.

Categories

Resources