【问题标题】:Javascript format date / time [duplicate]Javascript格式日期/时间[重复]
【发布时间】:2014-10-06 04:40:57
【问题描述】:

我需要将日期/时间从 2014-08-20 15:30:00 更改为类似于 08/20/2014 3:30 pm p>

这可以使用 javascript 的 Date 对象来完成吗?

【问题讨论】:

  • Date() 应该解析它。将其分配给一个变量,然后使用您可用的方法来构造您想要的格式。他们是here
  • 最好在 Javascript 中使用 Intl.DateTimeFormat 并为此设置一个选项。它更简单,更灵活。请参阅我的帖子了解更多详情。 link。和在线解决方案为您解答:online answer

标签: javascript date datetime


【解决方案1】:

是的,您可以使用原生 javascript Date() object 及其方法。

例如,您可以创建如下函数:

function formatDate(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0'+minutes : minutes;
  var strTime = hours + ':' + minutes + ' ' + ampm;
  return (date.getMonth()+1) + "/" + date.getDate() + "/" + date.getFullYear() + "  " + strTime;
}

var d = new Date();
var e = formatDate(d);

alert(e);

并显示上午/下午和正确的时间。

请记住使用 getFullYear() 方法而不是 getYear(),因为它已被弃用。

演示 http://jsfiddle.net/a_incarnati/kqo10jLb/4/

【讨论】:

  • 我是第一个使用 moment.js 的人,但在这种情况下,问题很明确:Javascript 格式日期/时间。我在 2012 年回答了这个问题,我相信能够使用原生 js 方法总是好的。现在这些库,比如 moment.js 甚至更好,所以使用库还是完全依赖语言真的取决于开发人员。
  • 嗯,答案在技术上是正确的。此外,问题询问如何使用 Date 对象,因此从技术上讲,如果从字面上看,这可能是对该问题的最准确答案。然而,这样的回答让很多程序员觉得,在遇到这样的问题时,复制粘贴这段代码是他们应该做的。那是 IMO 错了。
  • 这个月我错了。当我使用 () 时工作​​正常,例如 (date.getMonth()+1)。
  • 为什么不放“new Date();”进入函数,然后只是 formatDate(somestring)?那么你有一个对象构造函数而不是五十个。
【解决方案2】:

请不要重新发明轮子。已经存在许多开源和 COTS 解决方案来解决这个问题。

请查看以下 JavaScript 库:


演示

更新:我在下面使用 Moment.js Luxon 编写了一个单行代码。

const { DateTime } = luxon;

const value = DateTime
  .fromFormat("2014-08-20 15:30:00", "yyyy-MM-dd HH:mm:ss")
  .toFormat('MM/dd/yyyy h:mm a');

console.log(value); // 08/20/2014 3:30 PM
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.26.0/luxon.min.js"&gt;&lt;/script&gt;

这是使用 Moment 的原始版本。由于 Luxon 是 Moment 的继任者,因此我将其作为替代方案。

const value = moment('2014-08-20 15:30:00').format('MM/DD/YYYY h:mm a');

console.log(value); // 08/20/2014 3:30 pm
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 必须转换 JSON 数组才能使用调度程序小部件。这个解决方案让我可以在 5 分钟内完成。太棒了。
  • 哇,12k 只是为了格式化日期/时间?有时重新发明轮子是完全合理的。如果您正在进行大量日期操作,那么图书馆是正确的方法。如果您需要占用空间更小的一次性解决方案,那么您可以尝试stackoverflow.com/q/6312993/132599
  • 有时库不是一个选项(例如,在 Cloudant 服务器上的 couchdb 数据库上使用 javascript 时)。
  • “重新发明轮子” - 更像是换上新轮胎,也许是雪地轮胎,以提高牵引力! moment.js 就像在干燥的路面上坚持使用 4 轮驱动....
  • 纯 Javascript 实际上是轮子,如果人们不尝试重新发明它,就不会出现像 Moment.js 这样的伟大事物。
【解决方案3】:

对于日期部分:(月份为 0 索引,而日期为 1 索引)

var date = new Date('2014-8-20');
console.log((date.getMonth()+1) + '/' + date.getDate() + '/' +  date.getFullYear());

暂时你会想要创建一个函数来测试不同的情况并进行转换。

【讨论】:

  • 为什么索引不同?
  • 可能是因为它们有两种不同的解释:月份的天数本质上是一个编号,并且它们仅由这个编号来表征。在这种情况下,这不是一个索引,而月份通常以其名称为特征。这就是为什么它是一个索引表示(这就是为什么它们从 0 开始)。用起来还是很痛。
【解决方案4】:

我认为使用原生 Date 对象上的内置方法无法可靠地做到这一点。 toLocaleString 方法接近了,但如果我没记错的话,它在 IE MomentJS 是一个非常棒的库;它使处理日期和时间变得容易。否则,我认为您将不得不编写一个基本函数来为您提供所需的格式。

function formatDate(date) {
    var year = date.getFullYear(),
        month = date.getMonth() + 1, // months are zero indexed
        day = date.getDate(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        hourFormatted = hour % 12 || 12, // hour returned in 24 hour format
        minuteFormatted = minute < 10 ? "0" + minute : minute,
        morning = hour < 12 ? "am" : "pm";

    return month + "/" + day + "/" + year + " " + hourFormatted + ":" +
            minuteFormatted + morning;
}

【讨论】:

  • if (month &lt; 10) month = '0' + month; if (day &lt; 10) day = '0' + day; 你可以在return语句之前添加这个,让日期看起来更符合人体工学。
  • 一种更简单的补零方式一般是:('0' + month).slice(-2)
  • 在 ES6 中,`0${month}`.slice(-2)
  • 或者,更详细一点,但意图更清晰:d.getMinutes().toString().padStart(2, '0')(适用于任何现代浏览器,即不在 IE 中)
【解决方案5】:

你可以这样做:

function formatAMPM(date) { // This is to display 12 hour format like you asked
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0'+minutes : minutes;
  var strTime = hours + ':' + minutes + ' ' + ampm;
  return strTime;
}

var myDate = new Date();
var displayDate = myDate.getMonth()+ '/' +myDate.getDate()+ '/' +myDate.getFullYear()+ ' ' +formatAMPM(myDate);
console.log(displayDate);

Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多