Javascript日期到字符串方法不能正常工作

时间:2015-12-02 05:13:37

标签: javascript datetime

我正在使用Javascript Date对象toString方法格式化日期,如下所示

var firstDate ='13/11/2015 13:27:24';
var secondDate ='07/11/2015 13:19:45';

var dateDisplay1 =  Date.parse(firstDate).toString("dd/MM/yyyy  HH:mm");

输出:13/11/2015 13:27 => 11月13日是正确的

var dateDisplay2 =  Date.parse(secondDate ).toString("dd/MM/yyyy  HH:mm");
11/07/2015 13:19

输出:11/07/2015 13:19 => 7月11日错误应该是11月7日

dateDisplay2的预期为 07/11/2015 13:19

4 个答案:

答案 0 :(得分:2)

<强>已更新

以下是手动执行此操作的一种方法:

http://jsfiddle.net/gratiafide/kgstubtn/18/

<强>使用Javascript:

var firstDate = '13/11/2015 13:27:24';
var secondDate = '07/11/2015 13:19:45';

document.getElementById("myBtn").addEventListener("click", function () {
  var splitHalf = firstDate.split(" ");
  var splitCalendar = splitHalf[0].split("/");
  var splitMinutes = splitHalf[1].split(":");
  var date = splitCalendar[0] + "/" + splitCalendar[1] + "/" + splitCalendar[2] + " " + splitMinutes[0]  + ":" + splitMinutes[1];
  document.getElementById("demo").innerHTML = date;
});

<强> HTML:

<p>Click the button to display your date formatted correctly.</p>

<button id="myBtn">Try it</button>

<p id="demo"></p>

答案 1 :(得分:2)

  

var dateDisplay1 = Date.parse(firstDate).toString(“dd / MM / yyyy HH:mm”);

这里有一些问题。

解析日期字符串主要取决于实现,并且遵循以下标准可能会产生不一致的结果。您应该手动解析日期字符串,如果您只有一种格式并且确定它是有效日期,则库可以提供帮助但是2行功能就足够了(见下文)。测试有效日期只需要一行。

Date.parse 返回一个数字,这是一个时间值,因此Date.parse(...).toString()正在调用Number.prototype.toString,其中传递的参数是基数。所以如果 Date.parse返回一个合适的值,那么:

new Date(Date.parse(...)).toString()

是必需的。

如果您希望以特定格式显示日期字符串,您可以测试对internationalization API的支持并使用它并回退到您自己的函数(或者只使用您自己的函数),例如

function parseDMY(s) {
  var b = s.split(/\D+/);
  return new Date(b[2], b[1]-1, b[0], b[3], b[4], b[5]);
}

function formatDateDMYhm(d) {

  // Use internationalization API if available
  if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') {
    options = {
      year: 'numeric', month: '2-digit', day: '2-digit',
      hour: '2-digit', minute: '2-digit', /* second: '2-digit', */
      hour12: false
    };
    return d.toLocaleString('en-GB', options);
  }

  // Otherwise, use bespoke function    
  function z(n){return (n<10? '0':'') + n}
  return z(d.getDate()) + '/' + z(d.getMonth()) + '/' + d.getFullYear() +
         ' ' + z(d.getHours()) + ':' + z(d.getMinutes());
}

var firstDate ='13/11/2015 13:27:24';
var secondDate ='07/11/2015 13:19:45';

document.write(formatDateDMYhm(parseDMY(firstDate)) + '<br>');
document.write(formatDateDMYhm(parseDMY(secondDate)));

虽然如果使用国际化API,它会在日期之后在某些浏览器(例如Chrome)中插入额外的逗号,但不会在其他浏览器(例如IE)中插入,所以即使使用标准也不一定产生“标准”结果。也许在这种情况下不应该使用它。使用月份名称不那么模糊,因此请考虑使用它,例如2015年11月13日13:27。

答案 2 :(得分:0)

secondDate之后有一个空格。删除它。

var dateDisplay2 =  Date.parse(secondDate).toString("dd/MM/yyyy  HH:mm");

答案 3 :(得分:-1)

只需使用新的日期(字符串)并传递日期字符串。

由于