单独的日期字符串和时间字符串组合成一个解析日期时间戳

Posted

技术标签:

【中文标题】单独的日期字符串和时间字符串组合成一个解析日期时间戳【英文标题】:Separate Date String and Time String combining into a parsed Date&time stamp 【发布时间】:2019-03-31 22:15:29 【问题描述】:

我一直在研究是否将日期放在单独的字符串中

date = 18-9-2018

时间为

time= 01:50 PM

如果我想创建上述两个变量的时间戳,我该如何 应该有吗?

手头的问题是 我从 API 端点接收这些变量,我需要有准确的时间戳,以便我可以将它们用作 本地提醒通知强> 在确切的时间和日期!

这是我迄今为止尝试过的

  createTheLocalAlert(appointments) 
    // Schedule delayed notification
    appointments.description.forEach(appointment => 
        let notificationText =
            `you have meeting with $appointment.name today at $appointment.meeting_start`;

        let theDate = appointment.appointment_date.split("-");
        let newDate = theDate[1] + "/" + theDate[0] + "/" + theDate[2];
        let DateWithTime = newDate + appointment.meeting_start;
        // alert(new Date(newDate).getTime()); //will alert 1330210800000
        // console.warn("theTime_is===>" + new Date(DateWithTime));

        this.localNotifications.schedule(
            text: notificationText,
            trigger: at: new Date(new Date(DateWithTime).getTime() - 7200), // 2 hours before meetup
            led: 'FF0000',
            vibrate: true,
            icon: 'assets/imgs/logo.jpg',
            sound: null
        );
    );

我可以将日期转换为邮票,但我无法计算 一种将时间添加到日期中并解析出确切时间的方法 戳那个日期和时间。

**

我们将不胜感激任何形式的帮助。

【问题讨论】:

【参考方案1】:

试试下面的代码。

    formatDateWithTime(date,time)
             if(date && time)
               let splitDate  = date.split('-');
               let splitTime = time.split(':');
               let formattedDate:any;
               return formattedDate = new Date(splitDate[ 2 ], splitDate[ 1 ] - 1, splitDate[ 0 ],splitTime[ 0 ], splitTime[ 1 ], 
             else
                 return 0
             
       

【讨论】:

【参考方案2】:

这是支持您拥有的所有数据的 Date 构造函数:

new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])

这里的棘手部分是 Date 构造函数不验证值。

如果hour = 25,它只是添加1 day and 1 hour。需要显式验证: 小时为 [0,23],分钟为 [0,59],monthIndex 为 [0,11](JS 使用 0-11 表示月份)

function combineDateAndTime(dateStr, timeStr) 
    let [dt,month,year] = dateStr.split("-").map(t => parseInt(t));  // pattern: dd-mm-yyyy
    let [suffix] = timeStr.match(/AM|PM/);                           // AM/PM
    let [hour,min] = timeStr.match(/\d+/g).map(t => parseInt(t));    // hh:mm 
    
    if (month <= 0 && month > 12) return null;
    if (hour <= 0 && hour > 23) return null;
    if (min <= 0 && min > 59) return null;
    
    month -= 1; // monthIndex starts from 0
    if (suffix === "AM" && hour === 12) hour = 0;
    if (suffix === "PM" && hour !== 12) hour += 12;

    return new Date(year, month, dt, hour, min);


console.log(combineDateAndTime("18-9-2018", "12:50 AM").toString());
console.log(combineDateAndTime("18-9-2018", "12:50 PM").toString());

【讨论】:

以上是关于单独的日期字符串和时间字符串组合成一个解析日期时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何在 db2 中将日期和时间组合成时间戳?

MySql,将日期和时间列组合成时间戳

AngularJS,如何将多个输入组合成一个 ng 模型?具体来说,将日期、时间和时区输入组合到 datetime 对象中

关于在delphi中时间日期的转换问题,高手进

如何将两个firebase集合组合成一个新的对象数组

日期时间字符串解析