Javascript JDE/Julian时间:如何格式化Julian时间戳编号
在我的系统中,时间戳是使用旧的IBM julian格式返回的 例如:Javascript JDE/Julian时间:如何格式化Julian时间戳编号,javascript,regex,jdedwards,Javascript,Regex,Jdedwards,在我的系统中,时间戳是使用旧的IBM julian格式返回的 例如: 凌晨12点0分1秒(午夜后1秒)返回01。 上午12点22分15秒返回2215。 凌晨1点22分15秒返回12215。 上午7点45分1秒返回74501。 下午7点22分15秒返回192215 我需要一个正则表达式将其转换为: 凌晨12点0分1秒(午夜后1秒):00:00.01 12点22分15秒上午:00:22.15 凌晨1点22分15秒:01:22.15 上午7点45分1秒:7:45.01 下午7点22分15秒:19:22
凌晨12点0分1秒(午夜后1秒)返回01。
上午12点22分15秒返回2215。
凌晨1点22分15秒返回12215。
上午7点45分1秒返回74501。
下午7点22分15秒返回192215 我需要一个正则表达式将其转换为:
凌晨12点0分1秒(午夜后1秒):00:00.01
12点22分15秒上午:00:22.15
凌晨1点22分15秒:01:22.15
上午7点45分1秒:7:45.01
下午7点22分15秒:19:22.15 感谢您的帮助 解决方案 多亏了MikeM,以下是解决方案:
//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';
time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
function ( all, hr1, hr2, min, sec ) {
return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
}
);
我给你一个线索:
Math.floor()
来完成相同的操作(因为这些都是正数)
以下是OP修改后的代码:
$(function () {
var val1 = 41215,hr=0,min=0,sec=0;
sec = val1%100;
val1 = Math.floor(val1 / 100);
min = val1%100;
hr = Math.floor(val1 / 100);
// format the result. This example could show 1:1:1 instead of 01:01:01
tst2 = hr.toString()+':'+min.toString()+'.'+sec.toString();
alert(tst2.toString());
});
我给你一个线索:
Math.floor()
来完成相同的操作(因为这些都是正数)
以下是OP修改后的代码:
$(function () {
var val1 = 41215,hr=0,min=0,sec=0;
sec = val1%100;
val1 = Math.floor(val1 / 100);
min = val1%100;
hr = Math.floor(val1 / 100);
// format the result. This example could show 1:1:1 instead of 01:01:01
tst2 = hr.toString()+':'+min.toString()+'.'+sec.toString();
alert(tst2.toString());
});
以下内容适用于您的示例,但除此之外,我还没有对其进行测试
//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';
time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
function ( all, hr1, hr2, min, sec ) {
return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
}
);
虽然它给出了
07:45.01
而不是7:45.01
,以便与01:22.15
保持一致,但下面的例子适用于您的例子,尽管除此之外我还没有对它进行测试
//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';
time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
function ( all, hr1, hr2, min, sec ) {
return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
}
);
虽然它给出了
07:45.01
而不是7:45.01
,以符合01:22.15
为什么我否决了这个问题:01:01:01是如何返回的?仅使用regex是不够的。现有资源可以轻松回答您的问题:时间元素来自JDE ERP系统。它不是一个系统朱利安格式。在JDE的wisom(???)中,他们决定将所有日期转换为人类可读的数字,并构建内部类来管理这些日期。例如,2013年4月12日存储为113102。1-->13@AlexW添加将不起作用,因为它们不是自某个基准时间以来经过的秒数。我在回答中添加了一些关于传入格式的信息。为什么我否决了这个问题:01:01:01是如何返回的?仅使用正则表达式是不够的。现有资源可以轻松回答您的问题:时间元素来自JDE ERP系统。它不是一个系统朱利安格式。在JDE的wisom(???)中,他们决定将所有日期转换为人类可读的数字,并构建内部类来管理这些日期。例如,2013年4月12日存储为113102。1-->13@AlexW添加将不起作用,因为它们不是自某个基准时间以来经过的秒数。我已经在回答中添加了一些关于传入格式的信息。分和秒仅为59。李·马多,非常感谢,这会让我走的。我走上了做子串的可怕道路,结果变得太难看了。谢谢大家!相信我!如果传入的格式如我所相信的那样,它将起作用。我认为在任何情况下,仅数值计算都不是正确的答案。我们在这里处理的是IEEE-754“双精度”浮点值。后来OP明确了格式;我看不出您在处理“年”和“年中日”组件。我只询问ERP提供的时间元素,我在日期格式(Julian day,而不是Julian date)上面提到过。我为这一混乱道歉。我的小问题的解决方法在上面有详细说明。分秒只到59。李·马多,非常感谢,这会让我走的。我正走在那条可怕的做子串的道路上