用JavaScript格式化日期?

用JavaScript格式化日期?,javascript,Javascript,我将endDate 2014-07-27 12:00 am指定给以下代码,它将生成2014年7月28日00:00:00 GMT+0530(印度标准时间),但我想显示endDate,如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.se

我将endDate 2014-07-27 12:00 am指定给以下代码,它将生成2014年7月28日00:00:00 GMT+0530(印度标准时间),但我想显示endDate,如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]);
}
一旦你有了一个有效的日期对象,你就可以使用日期方法来格式化它

/* 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
/*给定日期对象的12小时格式返回时间,或
**如果d为假,则当前系统时间
**例如,上午12:00,下午1:15
**如果secs为true,则还显示seconds
**例如,上午12:00:00,下午1:15:23
*/
函数到12小时时间(d,秒){
d=d | |新日期();
var-hrs=d.getHours();
//用前导零填充一位数

var pad=function(n){return(nDom不使用日期构造函数来解析字符串,它不可靠且依赖于实现。某些人会将该格式视为UTC格式,其他人会将其视为本地格式,少数人会将其视为
NaN
。始终手动解析字符串(有一些库可提供帮助,但只有两三行代码,所以请自己动手)。没有12:00AM这回事。现在是00:00(午夜)。如果出于某种原因,你想将午夜显示为12:00AM,你必须自己来做。@torazaburo是的,但在书写12小时时间时,将午夜显示为上午12点,将中午显示为下午12点是惯例,这可能很烦人(而且12:59am在凌晨1:00AM之前出现)