我想为管理员和首页创建 jalaali 日历(波斯日历)而不是 magento 核心日历。
为此,我将这些行添加到我的模块中的 requirejs-config 中:
'map': {
'*': {
'mage/calendar' : 'MyNamespace_MyModule/js/persian_calendar',
'Magento_Ui/js/form/element/date' : 'MyNamespace_MyModule/js/form/element/date_form'
}
}
波斯日期和公历日期完全不同,它们有不同的年、月和日名称。我想向用户显示波斯日期,但将日期作为 gregorian 格式保存到数据库。
为了将公历日期发送到服务器,我更改了onShiftedValueChange 函数,我在自定义 date_form 中执行此操作:
onShiftedValueChange: function (shiftedValue) {
var value,
formattedValue,
formattedValueUTC,
momentValue;
// this is very simple code that check if selected date is gregorian date or persian date
var englishYears = ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026",
"2027", "2028", "2029", "2030", "۲۰۱۸", "۲۰۱۹", "۲۰۲۰", "۲۰۲۱", "۲۰۲۲", "۲۰۲۳", "۲۰۲۴",
"۲۰۲۵", "۲۰۲۶", "۲۰۲۷", "۲۰۲۸", "۲۰۲۹", "۲۰۳۰"];
var englishDate = false;
for (var i = 0; i < 26; i++) {
if (shiftedValue.indexOf(englishYears[i]) > -1) {
englishDate = true;
break;
}
}
if (shiftedValue) {
// if selected date was persian,I converted it to equivalent gregorian format, for converting dates I used https://github.com/jalaali/moment-jalaali library
if (!englishDate) {
shiftedValue = jMoment.from(shiftedValue, 'fa', 'DD/MM/YYYY HH:mm').format(this.pickerDateTimeFormat);
}
// the rest codes are for magento itself
momentValue = moment(shiftedValue, this.pickerDateTimeFormat);
if (this.options.showsTime) {
formattedValue = moment(momentValue).format(this.timezoneFormat);
formattedValueUTC = moment.tz(formattedValue, this.storeTimeZone).tz('UTC');
value = this.outputDateTimeToISO ?
formattedValueUTC.toISOString() :
formattedValueUTC.format(this.outputDateTimeFormat);
} else {
value = momentValue.format(this.outputDateFormat);
}
} else {
value = '';
}
if (value !== this.value()) {
this.value(value);
}
}
通过这些代码,等效的公历日期被正确发送到服务器,但是当我检查存储在数据库中的值时,它完全不同且无效,例如我发送了这个值:4/14/2019 5:30 am,但 magento 将其转换为:0010-08-10 05:30:00 !!
我想我的自定义 date_form 中的格式日期可能与 magento 表单 php 代码中的格式日期不同,导致这个问题,因为当我将 this.outputDateTimeFormat 参数更改为例如:“YYYY/DD/MM HH:mm”时,存储值已更改并且它获得了有效的格式值(例如:“2023-08-10 05:30:00”),但它仍然具有与发送的值不同的值并且它们不等效。
我不知道 magento 在哪里检查输入日期并将其更改为不正确的值。
有人知道magento在哪里检查日期输入并更改它们吗?或者有没有人对此有完全不同的想法?