0

time : { $dateToString: { format: "%H:%M:%S:%L%z", date: "$generated_on", timezone: "+05:30" }} with the help of this time is generated but I want time in AM/PM format}\

Master.Deep
  • 792
  • 5
  • 20
  • if you are using it inside the pipeline, I guess, you need to add a custom js function but I think the better option would be to store the correct format in the first place – sina.ce Feb 16 '22 at 07:09

1 Answers1

0

So basically, for time being (version 5), Mongo DB does not support the AM/PM format on the date object, you have two options:

option one: Store the correct format in the first place

option two(heavy operation): store a JS function inside the MongoDB for this custom format and call that in your aggregation pipeline, js function would be like this:

   function formatAMPM(date) {
      var hours = date.getHours();
      var minutes = date.getMinutes();
      var ampm = hours >= 12 ? 'PM' : 'AM';
      hours = hours % 12;
      hours = hours ? hours : 12; // the hour '0' should be '12'
      minutes = minutes < 10 ? '0'+minutes : minutes;
      var strTime = hours + ':' + minutes + ' ' + ampm;
      return strTime;
    }

Add MongoDB custom JS function myCustomDate:

 db.system.js.insertOne(
    {
        _id: "myCustomDate",
        value: function (date) {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var ampm = hours >= 12 ? 'PM' : 'AM';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0' + minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;
            return strTime;
        }
    }
);

and use this based on your requirements on mapReduce command

sina.ce
  • 460
  • 2
  • 8