用JavaScript格式化日期

Format the date in JavaScript?

本文关键字:日期 格式化 JavaScript      更新时间:2023-09-26

我给了结束日期2014-07-27 12:00 am以下代码,它生成2014年7月28日00:00:00 GMT+0530(印度标准时间),但我想显示结束日期像2014-07-28 12:00 am。我该怎么做呢?

endDate = "2014-07-27 12:00";
alert(endDate);
if (endTime == "12:00 AM") {
  endDate = new Date(endDate);
  // add a day
  endDate.setDate(endDate.getDate() + 1);
}

字符串:

'2014-07-27 12:00 AM'

不符合ES5中指定的格式,因此浏览器如何处理它完全取决于实现。也许有些人会把它当作UTC,有些人会把它当作本地的,还有一些人根本不会解析它。

您可以自己解析字符串,假设您希望将其视为本地时间:

// Parse a string like 2014-07-27 12:00 AM as a local date and time
function parseISOLike(s) {
  s = s.split(/[- :]/);
  var ap = s[5].toLowerCase();
  var h = s[3]%12 + (ap == 'am'? 0 : 12);
  return new Date(s[0], --s[1], s[2], h, s[4]);
}

一旦你有了一个有效的Date对象,你就可以使用Date方法任意格式化它,例如

/* Return time in 12hr format for given Date object, or
** current system time if d is falsey
** e.g. 12:00 AM, 01:15 PM
** If secs is true, also show seconds
** e.g. 12:00:00 AM, 01:15:23 PM
*/
function to12hrTime(d, secs) {
  d = d || new Date();
  var hrs = d.getHours();
  // Pad single digit numbers with a leading zero
  var pad = function(n){return (n<10?'0':'')+ +n};
  return pad(hrs%12 || 12) + ':' + pad(d.getMinutes()) +
         (secs? ':' + pad(d.getSeconds()) : '') +
         ' ' + (hrs<12? 'AM':'PM');
}
// Format date as YYYY-MM-DD hh:mm AP
function formatDate(d) {
  function z(n){return (n<10?'0':'') + n;}
  return d.getFullYear() + '-' + z(d.getMonth() + 1) + '-' +
         z(d.getDate()) + ' ' + to12hrTime(d);
}
console.log(formatDate(parseISOLike('2014-07-27 1:00 pm'))); // 2014-07-27 01:00 PM

有各种各样的库可以帮助格式化。没有时区缩写的标准,也没有可靠的方法来确定它在javascript中可能是什么,但是一些库做得很好。