- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找将 PHP 日期格式(即 Y-m-d H:i:s)转换为 javascript 日期格式(分别为 YYYY-mm-dd HH:mm:ss)的简便方法。
我不想转换日期(这个问题已经有了答案),我正在寻找工具/函数来转换格式代码(我没有还不知道,因为它是由用户在应用程序中定义的)。
用户可以用 PHP date() 定义的不同方式定义它,即 'Y/m/d H:i' 或 'Y-d-m H-i',我需要在 javascript 中显示日期时使用相同的格式。
您知道任何现成的转换函数吗?
<?php
$timeformat_php = "H:i:s"; //just defined by the user
$time_universal = date( $timeformat_php, strtotime( $time_php ) );
echo date($timeformat_php, $time_universal); //print as defined by user
?>
<script>
var timeformatPhp = '<?php echo $timeformat_php ?>';
var timeformatJavascript = functionThatIamLookingFor (timeformatPhp);
alert(moment($time_universal).format(timeformatJavascript); //printed again the way user defined
</script>
任何帮助将不胜感激。谢谢。
最佳答案
如果您要问的是使用 PHP 格式化标记来格式化 ECMAScript 日期对象,那么类似下面的内容可能会有所帮助。它支持除时区名称以外的所有标记。我不认为你可以仅在浏览器中使用 javascript 可靠地做到这一点,尽管像 node.js 这样的东西可能能够。
有一些功能可以使用,例如是否正在观察夏令时以及生成 RFC 2822 格式字符串,但我认为它们很容易添加。它支持带引号的字符,因此您可以构建如下字符串:
P.format(date, 'jS \\o\\f F, Y') // 1st of August, 2019
任何与标记不匹配的字符都会被复制到输出字符串(例如上面的空格和逗号)。
// Parser and formatter using PHP tokens
let P = function(global) {
let P = {lang: 'en-GB'};
// Format tokens and functions
let tokens = {
// DAY
// day of month, pad to 2 digits
d: d => pad(d.getDate()),
// Day name, first 3 letters
D: d => getDayName(d).substr(0,3),
// day of month, no padding
j: d => d.getDate(),
// Full day name
l: d => getDayName(d),
// ISO weekday number (1 = Monday ... 7 = Sunday)
N: d => d.getDay() || 7,
// Ordinal suffix for day of the month
S: d => getOrdinal(d.getDate()),
// Weekday number (0 = Sunday, 6 = Saturday)
w: d => d.getDay(),
// Day of year, 1 Jan is 0
z: d => {
let Y = d.getFullYear(),
M = d.getMonth(),
D = d.getDate();
return Math.floor((Date.UTC(Y, M, D) - Date.UTC(Y, 0, 1)) / 8.64e7) ;
},
// ISO week number of year
W: d => getWeekNumber(d)[1],
// Full month name
F: d => getMonthName(d),
// Month number, padded
m: d => pad(d.getMonth() + 1),
// 3 letter month name
M: d => getMonthName(d).substr(0, 3),
// Month number, no pading
n: d => d.getMonth() + 1,
// Days in month
t: d => new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(),
// Return 1 if d is a leap year, otherwise 0
L: d => new Date(d.getFullYear(), 1, 29).getDate() == 29? 1 : 0,
// ISO week numbering year
o: d => getWeekNumber(d)[0],
// 4 digit year
Y: d => {
let year = d.getFullYear();
if (year < 0) {
year = '-' + ('000' + Math.abs(year)).slice(-4);
}
return year;
},
// 2 digit year
y: d => {
let year = d.getFullYear();
if (year >= 0) {
return ('0' + year).slice(-2);
} else {
year = Math.abs(year);
return - + ('0' + year).slice(-2);
}
},
// Lowercase am or pm
a: d => d.getHours() < 12? 'am' : 'pm',
// Uppercase AM or PM
A: d => d.getHours() < 12? 'AM' : 'PM',
// Swatch internet time
B: d => (((+d + 3.6e6) % 8.64e7) / 8.64e4).toFixed(0),
// 12 hour hour no padding
g: d => (d.getHours() % 12) || 12,
// 24 hour hour no padding
G: d => d.getHours(),
// 12 hour hour padded
h: d => pad((d.getHours() % 12) || 12),
// 24 hour hour padded
H: d => pad(d.getHours()),
// Minutes padded
i: d => pad(d.getMinutes()),
// Seconds padded
s: d => pad(d.getSeconds()),
// Microseconds padded - always returns 000000
u: d => '000000',
// Milliseconds
v: d => padd(d.getMilliseconds()),
// Timezone identifier: UTC, GMT or IANA Tz database identifier - Not supported
e: d => void 0,
// If in daylight saving: 1 yes, 0 no
I: d => d.getTimezoneOffset() == getOffsets(d)[0]? 0 : 1,
// Difference to GMT in hours, e.g. +0200
O: d => minsToHours(-d.getTimezoneOffset(), false),
// Difference to GMT in hours with colon, e.g. +02:00
P: d => minsToHours(-d.getTimezoneOffset(), true),
// Timezone abbreviation, e.g. AEST. Dodgy but may work…
T: d => d.toLocaleString('en',{year:'numeric',timeZoneName:'long'}).replace(/[^A-Z]/g, ''),
// Timezone offset in seconds, +ve east
Z: d => d.getTimezoneOffset() * -60,
// ISO 8601 format - UTC
// c: d => d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +
// 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +
// '+00:00',
// ISO 8601 format - local
c: d => P.format(d, 'Y-m-d\\TH:i:sP'),
// RFC 2822 formatted date, local timezone
r: d => P.format(d, 'D, d M Y H:i:s O'),
// Seconds since UNIX epoch (same as ECMAScript epoch)
U: d => d.getTime() / 1000 | 0
};
// Helpers
// Return day name for date
let getDayName = d => d.toLocaleString(P.lang, {weekday:'long'});
// Return month name for date
let getMonthName = d => d.toLocaleString(P.lang, {month:'long'});
// Return [std offest, DST offset]. If no DST, same offset for both
let getOffsets = d => {
let y = d.getFullYear();
let offsets = [0, 2, 5, 9].map(m => new Date(y, m).getTimezoneOffset());
return [Math.max(...offsets), Math.min(...offsets)];
}
// Return ordinal for positive integer
let getOrdinal = n => {
n = n % 100;
let ords = ['th','st','nd','rd'];
return (n < 10 || n > 13) ? ords[n%10] || 'th' : 'th';
};
// Return ISO week number and year
let getWeekNumber = d => {
let e = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
e.setUTCDate(e.getUTCDate() + 4 - (e.getUTCDay()||7));
var yearStart = new Date(Date.UTC(e.getUTCFullYear(),0,1));
var weekNo = Math.ceil(( ( (e - yearStart) / 86400000) + 1)/7);
return [e.getUTCFullYear(), weekNo];
};
// Return true if o is a Date, otherwise false
let isDate = o => Object.prototype.toString.call(o) == '[object Date]';
// Convert numeric minutes to +/-HHMM or +/-HH:MM
let minsToHours = (mins, colon) => {
let sign = mins < 0? '-' : '+';
mins = Math.abs(mins);
let H = pad(mins / 60 | 0);
let M = pad(mins % 60);
return sign + H + (colon? ':' : '') + M;
};
// Pad single digits with a leading zero
let pad = n => (n < 10? '0' : '') + n;
// Pad single digits with two leading zeros, double digits with one leading zero
let padd = n => (n < 10? '00' : n < 100? '0' : '') + n;
// To be completed...
let parse = s => 'not complete';
P.parse = parse;
// Format date using token string s
function format(date, s) {
// Minimal input validation
if (!isDate(date) || typeof s != 'string') {
return; // undefined
}
return s.split('').reduce((acc, c, i, chars) => {
// Add quoted characters to output
if (c == '\\') {
acc += chars.splice(i+1, 1);
// If character matches a token, use it
} else if (c in tokens) {
acc += tokens[c](date);
// Otherwise, just add character to output
} else {
acc += c;
}
return acc;
}, '');
}
P.format = format;
return P;
}(this);
// Examples
console.log('Today is ' + P.format(new Date(), 'l, jS \\o\\f F, Y'));
let startPWars = new Date(-431,3,25);
let endPWars = new Date(-404,0);
console.log('The Peloponnesian Wars started on ' +
P.format(startPWars, 'd F, Y') +
' and ended in ' +
P.format(endPWars, 'Y'));
function showDate() {
let format = document.getElementById('i0').value;
document.getElementById('sp0').textContent = P.format(new Date(), format) || 'invalid tokens';
}
<input id="i0" placeholder="PHP format, e.g. d-M-Y">
<button onclick="showDate()">Show formatted date</button>
<br>
<span id="sp0"></span>
关于javascript - 将 PHP 日期格式转换为 Javascript 日期格式的函数(不是日期本身!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57279831/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!