【问题标题】:How to get +15 minutes date time in Javascript with dd/mm/yyyy hh:ii AM/PM format? [duplicate]如何在 dd/mm/yyyy hh:ii AM/PM 格式的 Javascript 中获得 +15 分钟的日期时间? [复制]
【发布时间】:2020-04-07 12:18:10
【问题描述】:

我必须使用 dd/mm/yyyy hh:ii AM/PM 格式的 Javascript 获取 +15 分钟的日期时间。

我应该比较两个日期,格式为dd/mm/yyyy hh:ii AM/PM

JS:

var date = new 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' 
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
var dd = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var mm = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);
var strTime = dd + '/' + mm + '/' + date.getFullYear() + " " + hours + ':' + minutes + ' ' + ampm;

【问题讨论】:

  • 到目前为止您尝试过什么?你被困在哪里了?
  • var date = new Date(); var hours = date.getHours(); var minutes = date.getMinutes(); var ampm = 小时 >= 12 ? '下午' : '上午';小时 = 小时 % 12;小时=小时?小时:12; // 小时 '0' 应该是 '12' hours = hours
  • 我不知道如何以相同格式获取 +15 分钟时间并比较相同格式日期

标签: javascript date date-manipulation


【解决方案1】:

首先让我注意,默认情况下,javascript 会为您提供 UTC 时间。

JavaScript 日期基本上指定为自 UTC 时间 1970 年 1 月 1 日午夜以来经过的毫秒数。此日期和时间与 UNIX 纪元相同,它是计算机记录的日期和时间值的主要基准值。 (refer)

当你使用Date()函数创建一个Date对象时,以上是正确的

使用 ES20xx,您可以使用template literal(IE 中不支持)和padStart(IE 中不支持)字符串扩展名来根据您的喜好格式化 Date 对象,如下面的 sn-p 所示。

我还有date.toLocaleString(),它以浏览器运行该功能的区域常用的格式提供字符串

toLocaleString() 方法返回一个对语言敏感的字符串 这个日期的表示。新的语言环境和选项参数让 应用程序指定其格式约定应该使用的语言 使用并自定义函数的行为。在较旧的 实现,忽略语言环境和选项参数, 使用的语言环境和返回的字符串的形式完全是 依赖于实现。(refer)

因此,简单的方法是在从日期对象获得的 Unix 时间戳上添加 15 分钟,并使用toLocaleString(这是第一个 sn-p)对其进行格式化

您还可以像比较任何整数一样比较下面的两个日期对象

var dt1 = (new Date()).getTime();//Unix timestamp (in milliseconds)
console.log("Current date Unix timestamp(ms)")
console.log(dt1)
console.log("15 mins later date Unix timestamp(ms)")
console.log(dt1+900000)//15min=900000ms (15*60*1000)
var dt = new Date(dt1);
var dt2= new Date(dt1+900000)
console.log("Unformatted dates 15 min apart (ISO 8601 / UTC)")
console.log(dt)
console.log(dt2)
console.log("Formatted dates 15 min apart (According to your timezone)")
console.log(dt.toLocaleString())
console.log(dt2.toLocaleString())

下面是较长的 sn-p,涉及在显示日期对象时对其进行格式化。我觉得这不如上述方法最佳。但仍然可以完成工作。

var dt = new Date();
console.log(dt);
const localdte = dt.toLocaleString();
console.log(localdte);
const [dated, time, ampm] = localdte.split(' ');
const [hh, mm, ss] = time.split(':');
var date = `${
    dt.getDate().toString().padStart(2, '0')}/${
    (dt.getMonth()+1).toString().padStart(2, '0')}/${
    dt.getFullYear().toString().padStart(4, '0')} ${
    dt.getHours().toString().padStart(2, '0')}:${
    dt.getMinutes().toString().padStart(2, '0')}`
console.log("Date right now");
console.log(date);
console.log("date 15 mins later");

var date15 = `${
    dt.getDate().toString().padStart(2, '0')}/${
    (dt.getMonth()+1).toString().padStart(2, '0')}/${
    dt.getFullYear().toString().padStart(4, '0')} ${
    (dt.getMinutes()>44?(dt.hours==23?00:dt.getHours()+1):dt.getHours()).toString().padStart(2, '0')}:${
    ((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
console.log("24 hour format " + date15);
if (ampm == "PM" && hh != 12 && hh!=00) {
  var date15 = `${
    dt.getDate().toString().padStart(2, '0')}/${
    (dt.getMonth()+1).toString().padStart(2, '0')}/${
    dt.getFullYear().toString().padStart(4, '0')} ${
    (dt.getMinutes()>44?(dt.getHours()+1)%12:dt.getHours()%12).toString().padStart(2, '0')}:${
    ((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
  console.log("12 hour format " + date15 + ampm); //12 hour format
} else if (hh == 00) {
  var date15 = `${
    dt.getDate().toString().padStart(2, '0')}/${
    (dt.getMonth()+1).toString().padStart(2, '0')}/${
    dt.getFullYear().toString().padStart(4, '0')} ${
    (dt.getMinutes()>44?1:12).toString().padStart(2, '0')}:${
    ((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
  console.log("12 hour format " + date15 + ampm);
} else {
  console.log("12 hour format " + date15 + ampm); //12 hour format
}
const dateISO = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours(), ((dt.getMinutes() + 15) % 60), dt.getMilliseconds());
console.log("ISO 8601 format (UTC)");
console.log(dateISO);

注意:chrome 控制台和 sn-p 控制台输出存在差异。在 chrome 控制台中,日期对象的输出始终被格式化为当地时间。在 sn-p 控制台中,日期对象的输出采用 UTC 格式并符合 ISO8601

感谢@RobG 指出我之前回答中的错误。

【讨论】:

  • 纯代码的答案没有那么有用。一个好的答案应该解释为什么 OP 有问题以及您的代码如何修复它。 “12 小时格式 2020-04-07T15:56:11.000ZPM”不是“12 小时格式”,也不是有效的 ISO 8601 格式。
  • 嘿@RobG,我知道我的回答有什么问题,请检查一下,让我知道你的想法:)
猜你喜欢
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2017-08-21
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多