javascript - 结合日期(日-月-年)和时间(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
解决方案
类似的东西?
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
推荐阅读
- mysql - MySQL 如果不为空,则更新列 a,如果不为空,则更新列 b
- r - 所有数据框行到新列
- reactjs - 不等待 useEffect 中的数据
- python - 使用键元组对 python 字典进行排序并使用 lambda
- javascript - 在背景图像上使用 jQuery 缩放
- android - Android Room 查询对象,其中至少一个项目存在于另一个列表中
- javascript - 获取用户输入并计算斜边
- c# - 连接关闭,应用程序挂起,ODP.Net 4.122.19.1 (19) 和 Oracle 数据库 11.2.0.4 设置了 SQLNET.EXPIRE_TIME
- machine-learning - 重叠依赖时间序列,ML 问题方法
- r - 如何在 R 中为线性回归模型归纳这两个数据集?