首页 > 解决方案 > 结合日期(日-月-年)和时间(hh:mm am/pm)并将其转换为 unix 格式(javascript)

问题描述

我有变量 oldDate 和 b。我想将它们组合起来并转换成 unix 格式。oldDate 具有日-月-年格式。转换为 unix 后,似乎月为一天。有没有更好的方法来做到这一点,还是我需要先将 oldDate 转换为月-日-年格式?

var oldDate = '10-03-2021';
var b = '7:45 AM';
var newB = oldDate + " " + b;
var bDate = new Date(newB).getTime();
console.log(bDate);
output: 1633218300000

标签: javascriptdatetime

解决方案


类似的东西?

function date2unix(oldDate, bTime)
  {
  let [d,m,y]   = oldDate.split('-').map(Number)
    , [h,mn,ap] = bTime.split(/:| /).map(s=>Number(s)||(/pm/i.test(s)?12:0))
    ;
  return new Date( y, --m, d, (h % 12) +ap, mn, 0 ).getTime()
  }

示例用法:

function date2unix(oldDate, bTime)
  {
  let [d,m,y]   = oldDate.split('-').map(Number)
    , [h,mn,ap] = bTime.split(/:| /).map(s=>Number(s)||(/pm/i.test(s)?12:0))
    ;
  return new Date( y, --m, d, (h % 12) +ap, mn, 0 ).getTime()
  }

let oldDate = '10-03-2021'
  , b = '7:45 AM'
  ;
let unixDate = date2unix(oldDate, b)
 
console.log('oldDate =', oldDate , `\n`, '     b =', b, `\n ----->` )
console.log('unixDate =', unixDate )



/* -- verif -- */
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }
let verifDate = new Date(unixDate)
console.log('\nverif:\n', verifDate.toLocaleString(), `\n`, verifDate.toLocaleString('en-US',options) ) 
.as-console-wrapper { max-height: 100% !important; top: 0; }


有关信息,有一个带有 AM PM 表示法的陷阱

_ 12am 是午夜 (00:xx)
_ 12pm 是中午 (12:xx)

https://en.wikipedia.org/wiki/12-hour_clock

// on AM -> ap = 0
// on PM -> ap = 12
// ... so :
if (h===12) h = 0 // then h + ap will return the correct hour value        

// or simply (without if)
h %= 12  // in the code :: (h % 12) + ap :: will return the correct hour value 

推荐阅读