如何使用 dd/mm/yyyy hh:ii AM/PM 格式在 Javascript 中获得 +15 分钟的日期时间?

How to get +15 minutes date time in Javascript with dd/mm/yyyy hh:ii AM/PM format?

我必须在 Javascript 中以 dd/mm/yyyy hh:ii AM/PM 格式获得 +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;

首先请注意,默认情况下 javascript 将为您提供 UTC 时间。

A JavaScript date is fundamentally specified as the number of milliseconds that have elapsed since midnight on January 1, 1970, UTC. This date and time are the same as the UNIX epoch, which is the predominant base value for computer-recorded date and time values. (refer)

当您使用 Date() 函数创建日期对象时,上述情况成立

使用 ES20xx,您可以使用 template literal (not supported in IE) and the padStart(IE 不支持)字符串扩展来根据您的喜好格式化 Date 对象,如下面的代码片段所示。

我还有 date.toLocaleString() 以浏览器所在区域常用的格式给出字符串 运行 函数

The toLocaleString() method returns a string with a language sensitive representation of this date. The new locales and options arguments let applications specify the language whose formatting conventions should be used and customize the behavior of the function. In older implementations, which ignore the locales and options arguments, the locale used and the form of the string returned are entirely implementation dependent.(refer)

因此,最简单的方法是将 15 分钟添加到从日期对象获得的 Unix 时间戳,并将其格式化为 toLocaleString(这是第一个片段)

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

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())

下面是较长的代码段,其中涉及在显示日期对象时对其进行格式化。我觉得这不如上面的方法最佳。但仍然有效。

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 控制台和代码段控制台输出有所不同。在 chrome 控制台中,日期对象的输出总是格式化为本地时间。在代码段控制台中,日期对象的输出采用 UTC 格式并且符合 ISO8601

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