【问题标题】:javascript dates with same date format具有相同日期格式的javascript日期
【发布时间】:2020-05-10 12:17:49
【问题描述】:

我在 javascript 日期中遇到问题。我想对previous datestart 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 格式

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

【问题讨论】:

标签: javascript date datetime date-format date-parsing


【解决方案1】:

这确实是日期格式问题,因此可能与 How to format a JavaScript date 重复。

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

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

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()));

【讨论】:

    【解决方案2】:

    如果问题只是小时不是 am/pm 格式,您可以通过这种方式修改您的函数,使用模运算符(我还在字符串末尾添加了 am/pm):

    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();
      
      // EDIT:
      var hour = date.getHours()%12; // using the modulo operator, you convert the hours to a range between 0 and 12
    
      if (hour == 0) {
          hour = 12;
      }
      
      var timeOfDay = "am";      
    
      if (date.getHours() >= 12) {
          timeOfDay = "pm";
      }
    
      hour = ("0" + hour).slice(-2);
      
     // END EDIT
    
      var min = ("0" + (date.getMinutes())).slice(-2);
      var seg = ("0" + (date.getSeconds())).slice(-2);
      return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + seg + " " + timeOfDay;
    }

    【讨论】:

    • % 实际上是一个返回余数的multiplicative operator,它不符合典型的模数行为,请参阅JavaScript % (modulo) gives a negative result for negative numbers。 ;-)
    • 不知道!幸运的是,在这种情况下它不会改变结果,但是谢谢,我会记住这一点以备不时之需 :) 有时 javascript 很奇怪......
    • 是的,人们通常不想要负数的模数。 javascript 的大部分行为都是从大约 1994 年的 Java 复制而来的(即当 Java 还是全新的时候),并且已经使用了太长时间,以至于无法改变像 % 这样的基本内容。 :-)
    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2010-11-03
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多