首页 > 解决方案 > 具有相同日期格式的javascript日期

问题描述

我在 javascript 日期中遇到问题。我想做相同的日期previous date格式start date

Excepted Output上一个日期

12AM 之后显示 00:00:00 到 12:00:00

12PM 后显示 00:00:00 至 12:00:00

格式

previous date 2020-05-10 16:31:28

开始日期

2020-05-10 02:00:00              //sample data
2020-05-10 05:00:00

我的代码:


var currentdate = new Date();
var prevdate = new Date(); //previous date

prevdate.setTime(currentdate.getTime() - (30 * 60 * 1000));

var newprevious = GetFormattedDate(prevdate);
console.log(newprevious);

//Date format yyyy-mm-dd h:MM:ss
function GetFormattedDate(date) {
  var month = ("0" + (date.getMonth() + 1)).slice(-2);
  var day = ("0" + (date.getDate())).slice(-2);
  var year = date.getFullYear();
  var hour = ("0" + (date.getHours())).slice(-2);
  var min = ("0" + (date.getMinutes())).slice(-2);
  var seg = ("0" + (date.getSeconds())).slice(-2);
  return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + seg;
}

注意:我无法更改 start_date 它的fixed格式

我应该改变什么?有人帮我吗?

标签: javascriptdatedatetimedate-formatdate-parsing

解决方案


这确实是一个日期格式问题,因此可能与如何格式化 JavaScript 日期相同。

正如 Drago96 已经回答的那样,您可以使用余数运算符 % 来修改小时值并根据需要添加 am 或 pm

使用get方法和处理每个部分的替代方法是使用Intl.DateTimeFormat对象formatToParts的格式化选项,例如

function formatDate(date) {
  let parts = new Intl.DateTimeFormat('default',{
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: true
  }).formatToParts(date).reduce((acc, part) => {
    if (part.type != 'literal') {
      acc[part.type] = part.value;
    }
    return acc;
  }, Object.create(null));
  
  return `${parts.year}-${parts.month}-${parts.day}\
 ${parts.hour}:${parts.minute}:${parts.minute}\
 ${parts.dayPeriod}`;
}

console.log(formatDate(new Date()));


推荐阅读