- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在构建一个将以英语和俄语显示的多语言网站。翻译方面的一切都很好,除了日期。
据我所知,PHP 的 strtotime()
函数严格用于英文日期,正如官方文档“Parse about any English textual datetime description into a Unix timestamp”中所说。
我已经尝试使用 setlocale( LC_TIME, 'ru_RU', 'russian' );
然后 strftime()
但它只是不断返回 unix 1970 年 1 月
日期。
我想做的是从日期中获取日期名称(即星期三)并显示它。通常,对于英语日期,我会像 $this->day = date('l', strtotime( $date ));
那样做,但是因为我想同时使用英语和俄语我是这样做的 $this->day = strftime("%A", strtotime($date) );
我的日期格式为“2015 年 10 月 13 日”,我认为这是问题的一部分,因为“十月”的俄语翻译是“Октябрь”所以最终结果是我最终尝试解析的是“Октябрь 13, 2015”,它总是返回“星期四”,而实际上 10 月 13 日是星期二。
这是我为解析日期所做的一切:
$this->month_arr = array();
// Loop through $event_dates array created above
if(isset($_GET['lang']) && $_GET['lang'] == 'ru') {
setlocale(LC_ALL, 'ru_RU.utf8', 'rus_RUS.1251', 'rus', 'russian');
}
foreach($this->event_dates as $date => $time) {
// Create the unix timestamp to parse with PHP
$unix_date = strtotime($date);
$this->month = strftime("%B", $unix_date);
$this->day = strftime("%A", $unix_date);
$this->year = strftime("%G", $unix_date);
// Create new array with date info
$this->month_arr[$this->month][] = $this->day; // Day of week
$this->month_arr[$this->month][] = $date; // Full textual date
$this->month_arr[$this->month][] = $this->year; // 4 Digit Year
$this->month_arr[$this->month][] = $time; // Start/end time array
}
这完美地解析了日期的英文表示,但其他一切似乎都搞砸了。作为临时回退,我从最终显示中删除了星期几,只是从初始日期字符串中删除“October”或“Октябрь”并显示它,但这不是客户所期望的。
我也尝试过这种格式:strftime('%B %e, %Y', $unix_date);
希望将 strftime()
格式与最初显示日期的方式是可行的,但这给了我相同的最终结果。
附言我在我的本地主机 MAMP 服务器上运行这一切。生产/暂存服务器在 nginx 上运行。
编辑:这是一个 WordPress 网站,日期是通过“Advanced Custom Fields Pro”创建的' 插入。该插件不允许用户将日期保存为时间戳。我已经尝试使用 WP 内置的 date_i18n($format, $unix_timestamp);
函数,但没有成功。
编辑 x2:我目前正在做这样的事情:
// Russian Months
$ru_months = array( 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' );
// English Months
$en_months = array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' );
// Get date string from ACF
$date_arr = explode(" ", get_sub_field('date'));
// Get the month name
$month = $date_arr[0];
// Get the array index of the month name
$month_index = array_search($month, $en_months);
// Piece together new date string in Russian translation
$date = $ru_months[$month_index] . " " . $day . ", " . $year;
目前有效,但我也想翻译日期名称。例如,2015 年 10 月 13 日,星期二,此方法并未提供执行该操作的可靠方法。
最佳答案
我在这里看到三个选项。
您始终可以自己编写 PHP 代码来转换日期。这是肮脏的,是蛮力,但它是直截了当的。
function add_weekday( $date ) {
$ru_weekdays = array( 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье' );
$en_weekdays = array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' );
$ru_months = array( 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' );
$en_months = array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' );
$en_date = str_replace( $ru_months, $en_months, $date );
$weekdays = $en_date === $date ? $en_weekdays : $ru_weekdays;
// $wday = strptime( $en_date, '%B %e, %Y' ); // Linux/Mac
// return $weekdays[ $wday['tm_wday']-1 ]." $date"; // Linux/Mac
return $weekdays[ DateTime::createFromFormat( 'M j, Y', $en_date )->format( 'N' )-1 ]." $date"; // PHP 5.3+
}
echo add_weekday( 'Октябрь 13, 2015' ); // Вторник Октябрь 13, 2015
echo add_weekday( 'October 13, 2015' ); // Tuesday October 13, 2015
例如,PECL intl module有一个 IntlDateFormatter :
$formatter = new IntlDateFormatter( 'ru', IntlDateFormatter::LONG, IntlDateFormatter::NONE );
$datetime = $formatter->parse( "13 октября 2015 r." );
$weekday = $datetime->format( 'l' ); // 'Tuesday'
但是intl非常挑剔;日期字符串必须与其精确 格式匹配:没有大写字母,没有 oктябрь,日期必须在月份之前,并且必须以“r.”结尾。
如果你问我,不够灵活,值得麻烦。
我爱SQL Server .看:
SELECT datename( dw, Try_Parse( N'Октябрь 13, 2015' AS date USING 'Ru-RU' ) );
-- 'Tuesday', if default language is English
SET LANGUAGE 'Russian';
SELECT datename( dw, Try_Parse( N'Октябрь 13, 2015' AS date ) );
-- 'вторник'
或Oracle , 也完成了工作:
SELECT TO_CHAR( TO_DATE( 'Октябрь 13, 2015', 'MON DD, YYYY', 'nls_date_language = Russian' )
, 'DAY', 'nls_date_language = Russian' ) FROM DUAL;
-- 'ВТОРНИК'
ALTER SESSION SET NLS_LANGUAGE = 'RUSSIAN';
SELECT TO_CHAR( TO_DATE( 'Октябрь 13, 2015', 'MON DD, YYYY' ), 'DAY' ) FROM DUAL;
-- 'ВТОРНИК'
您不需要任何 i18n 模块 - 它们已内置。
MySQL cannot parse international date - just like PHP.
我知道最常见的配置不会为您提供 SQL Server 或 Oracle,但它们是免费的,您不需要将它们用作主数据库。设置并连接它们后,许多日期时间 i18n 问题都可以通过单个查询解决。
但是要小心。我就是这样fell in love使用 SQL Server。
关于php - 使用 PHP 将英语日期转换为俄语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935191/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!