在Javascript中将“dd/MM/yyyy hh:mm tt”转换为“yyyy-mm-ddThh:mm”

lpwwtiir  于 2023-05-27  发布在  Java
关注(0)|答案(5)|浏览(158)

我的日期格式为“dd/MM/yyyy hh:mm tt”。(25/05/2023 2:30 PM)。
我想把它转换成“yyyy-mm-ddThh:mm”这种格式例如。(2023-05- 25 T14:30)使用Javascript。
我试着这样做:

console.log(new Date("25/05/2023 2:30 PM"));

但显示为“无效日期”

6qftjkof

6qftjkof1#

Javascript似乎非常缺乏内置的日期处理例程。
您可以提取日期部分并手动构建日期字符串,如下所示:

const mydate = "25/05/2023 2:30 PM";

console.log( dateFormatter(mydate) );

function dateFormatter(datestr){
  const regex = /^(\d{2})\/(\d{2})\/(\d{4}) (\d{1,2}):(\d{2}) ([AP]M)$/;
  const match = datestr.match(regex);

  if( ! match )
    throw new Error('Invalid date format')
    
  const parts = match.slice(1);
  let year      = parts[2];
  let month     = parts[1];
  let day       = parts[0]; 
  let hours     = parseInt(parts[3]) + (parts[5] == 'PM' ? 12 : 0);
  let minutes   = parts[4];
  
  month   = ('00'+month).substr(-2);
  day     = ('00'+day).substr(-2);
  hours   = ('00'+hours).substr(-2);
  minutes = ('00'+minutes).substr(-2);
   
  return `${year}-${month}-${day}T${hours}:${minutes}`; 
}

遗憾的是,JavaScript不支持/x标志或正则表达式中的自定义分隔符,就像Perl一样。所以regex部分可能有点神秘。
否则,它是相当直接的前进。

irlmq6kh

irlmq6kh2#

解析时间戳以获得值并在将小时转换为24小时制后根据需要重新格式化相当简单,例如

let timestamp = "25/05/2023 2:30 PM";

// Get the values
let [day, month, year, hour, min, ap] = timestamp.match(/\w+/g);

// Convert hour to 24 hour
hour = (/am/i).test(ap)? hour : +hour + 12;

// Pad hour to 2 digits
hour = ('0' + hour).slice(-2);

// Format as required
console.log(`${year}-${month}-${day}T${hour}:${min}`);

如果时间戳不能保证满足OP格式,您应该在此过程中添加一些验证和检查,以避免出错。

nzkunb0c

nzkunb0c3#

所得到的formattedDate将是期望的“yyyy-mm-ddThh:mm”格式,在该示例中将是“2023-05- 25 T14:30”。

试试下面的代码:

// Input date string in "dd/MM/yyyy hh:mm tt" format
var inputDateStr = "25/05/2023 2:30 PM";

// Split the input date string into its components
var dateComponents = inputDateStr.split(/[/ :]/);

// Extract the day, month, year, hour, and minute components
var day = dateComponents[0];
var month = dateComponents[1] - 1; // Month is zero-based in JavaScript Date object
var year = dateComponents[2];
var hour = dateComponents[3];
var minute = dateComponents[4];
var period = dateComponents[5]; // AM or PM

// Adjust the hour based on the period (AM/PM)
if (period === "PM" && hour < 12) {
  hour = parseInt(hour, 10) + 12;
}

// Create a new Date object using the extracted components
var date = new Date(year, month, day, hour, minute);

// Format the date as "yyyy-mm-ddThh:mm"
var formattedDate = date.toISOString().slice(0, 16);

console.log(formattedDate);
cetgtptt

cetgtptt4#

您可以拆分日期并按所需格式合并。一旦你得到了格式,你就可以把这个字符串传递给date对象,然后你就可以在你的应用程序中任意使用这个日期了。这里有一个这样的例子。

const initialDate = "25/05/2023 2:30 PM";
const dateParts = initialDate.split(' ');
const timeComp = dateParts[1] + " " + dateParts[2];
const dateSplit = dateParts[0].split(/\//);
const dateComp = [dateSplit[2], dateSplit[1], dateSplit[0]].join('-') + " " + timeComp;
const parsedISODate = new Date(new Date(dateComp).toString().split('GMT')[0] + ' UTC').toISOString();
console.log(parsedISODate);

// If you need to remove last part after minutes
const finalDate = parsedISODate.toString().substring(0, parsedISODate.toString().lastIndexOf(':'));
console.log(finalDate);
emeijp43

emeijp435#

我尝试console.log(newdate('time ')),但我认为这是错误的,new更像是创建一个对象。你可以尝试constDate = newDate('format ')和console.log(Date)
型号:var Date = new Date("1995, 11, 17"); console.log(Date); alert(Date);

相关问题