php中文转时间

要将中文字符串转换为时间,需要先将中文数字转换为阿拉伯数字,然后使用 PHP 的日期函数将字符串转换为时间对象。以下是一个示例代码,用于演示如何将中文字符串转换为时间:

<?php
// 中文数字转阿拉伯数字函数
function chineseToNumber($chinese)
{
    $map = array(
        '零' => 0,
        '一' => 1,
        '二' => 2,
        '三' => 3,
        '四' => 4,
        '五' => 5,
        '六' => 6,
        '七' => 7,
        '八' => 8,
        '九' => 9,
        '十' => 10,
        '十一' => 11,
        '十二' => 12,
    );

    $result = 0;
    $tmp = 0;
    foreach (explode('十', $chinese) as $value) {
        if (isset($map[$value])) {
            $tmp += $map[$value];
        }
    }

    return $result + $tmp;
}

// 中文日期转时间戳函数
function chineseDateToTimestamp($chineseDate)
{
    // 将中文数字转换为阿拉伯数字
    $chineseNumberMap = [
        '一' => '1',
        '二' => '2',
        '三' => '3',
        '四' => '4',
        '五' => '5',
        '六' => '6',
        '七' => '7',
        '八' => '8',
        '九' => '9',
    ];
    foreach ($chineseNumberMap as $chineseNumber => $number) {
        $chineseDate = str_replace($chineseNumber, $number, $chineseDate);
    }

    // 分离年月日
    preg_match('/(\d+)年(\d+)月(\d+)日/', $chineseDate, $matches);
    $year = intval($matches[1]);
    $month = chineseToNumber($matches[2]);
    $day = chineseToNumber($matches[3]);

    // 转换为时间戳
    return mktime(0, 0, 0, $month, $day, $year);
}

// 中文时间转时间戳函数
function chineseTimeToTimestamp($chineseTime)
{
    // 分离小时和分钟
    preg_match('/(\d+)点(\d+)分/', $chineseTime, $matches);
    $hour = chineseToNumber($matches[1]);
    $minute = chineseToNumber($matches[2]);

    // 获取当前时间戳
    $currentTime = time();

    // 将小时和分钟添加到当前时间戳
    $time = mktime($hour, $minute, 0, date('m', $currentTime), date('d', $currentTime), date('Y', $currentTime));

    // 如果时间已经超过今天,则将日期加一天
    if ($time < $currentTime) {
        $time += 86400;
    }

    return $time;
}

// 测试中文日期和时间转时间戳
$chineseDate = '二零二三年五月三十一日';
$chineseTime = '下午四点半';
$timestamp = chineseDateToTimestamp($chineseDate) + chineseTimeToTimestamp($chineseTime);
echo date('Y-m-d H:i:s', $timestamp);

在上面的代码中,我们定义了三个函数。chineseToNumber() 函数用于将中文数字转换为阿拉伯数字。chineseDateToTimestamp() 函数用于将中文日期转换为时间戳,首先将中文数字转换为阿拉伯数字,然后使用 preg_match() 函数从字符串中提取年、月、日,并将它们转换为时间戳。chineseTimeToTimestamp() 函数用于将中文时间转换为时间戳,同样使用 preg_match() 函数从字符串中提取小时和分钟,然后使用 mktime() 函数将它们添加到当前时间戳。如果时间已经超过了今天,则将日期加一天。

posted @ 2023-05-31 09:58  拓源技术  阅读(34)  评论(0编辑  收藏  举报